问题
在 msvs14
上,使用 #line
filename
以 nul.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
问题
- 为什么会这样?
- 这个神秘的
\\.\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/