c++ - #line 指令的 nul.h 文件名的文件路径不正确

标签 c++ visual-studio-2015 directive

问题

msvs14 上,使用 #line filenamenul.h 结尾的指令,例如:

#line 1 "nul.h"

将不正确的文件路径显示为神秘的 \\.\nul 而不是 __FILE__/../nul.h

例子

#pragma message(__FILE__)
#line 1 "../../nul.h"
die();

产生:

1>  c:\users\benio\documents\visual studio 2015\node\utils\lists.h
1>\\.\nul(1): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

问题

  1. 为什么会这样?
  2. 这个神秘的 \\.\nul 的来源是什么?

最佳答案

啊啊啊!您被一种非常讨厌的向后兼容性所困扰,它可以追溯到 DOS 1.0 左右。

有几个名称(NUL、CON 和 PRN 是示例)是 special (NUL 是空设备,CON 是控制台,PRN 是打印机)。问题在于这些神奇的名称早于目录并忽略文件扩展名 - 因此每当编译器尝试打开“.\nul.h”` 时,Windows 都会发现这一点,并说“啊哈!你可能正在运行一个依赖于 DOS 的程序向后兼容,而您想改为打开空设备”- 因此编译器会出错。

\\.\nul 是 nul 设备的规范名称。

Tl;dr:您必须更改包含文件的名称。将其称为 “null.h”

关于c++ - #line 指令的 nul.h 文件名的文件路径不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47002196/

相关文章:

c++ - Eigen - 排序矩阵对角线

c++ - 检查 C++ 中的管理访问权限

c++ - 为什么从 VS2010 迁移到 VS2015 时,相同的代码会慢两倍?

angularjs - 根据指令中的属性设置 templateUrl

javascript - 如何在 Angular Directive(指令)中编译 new element.attr() ?

c++ - 如何正确存储中文字符串?

c++ - 从 cin 读取不同类型的输入

asp.net-mvc - 将字符串参数的 MVC View Intellisense 警告获取到通用方法

visual-studio - 从 Visual Studio 将 Docker 发布到 AWS

javascript - NG-repeat 和指令一次展开一个列表项