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

Incorrect file path for nul.h filename of #line directive

本文关键字:文件 路径 文件名 不正确 指令 nul #line      更新时间:2023-10-16

>问题

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

#line 1 "nul.h"

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

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

生产:

1>  c:usersbeniodocumentsvisual studio 2015nodeutilslists.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是示例)是特殊的(NUL是空设备,CON是控制台,PRN是打印机)。 问题是这些神奇的名称早于目录并忽略文件扩展名 - 因此每当编译器尝试打开".ul.h"时,Windows 都会发现这一点,并说"啊哈! 您可能正在运行一个依赖于DOS向后兼容性的程序,并且您想打开空设备" - 因此编译器收到错误。

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

Tl;dr:您必须更改包含文件的名称。 改为"null.h"称呼它。