为什么#后跟一个数字似乎在C plus plus中什么都不做

Zhi*_* Wu 5 c++ comments

Repro步骤:

将以下行插入c ++源代码的任何行.

#1234
Run Code Online (Sandbox Code Playgroud)

任何行包括第一行,最后一行.即使您可以像这样在函数头和主体之间输入.

int foo()
#1234
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个数字可能很长,我测试了超过170个字符.如果添加任何非数字字符,则会出现编译错误.

我的问题是:为什么#后跟一个数字不会破坏编译,而#后跟一个非数字字符呢.

谢谢你的时间,大家.

Som*_*ude 11

这是一个行指令.大多数预处理器输出这些以告诉编译器它实际上在原始源文件中的哪些行.

由于预处理器可以向它提供给编译器的源添加许多(有时数百甚至数千)行,编译器需要跟踪原始源文件的行号.这是通过诸如此类的特殊指令完成的.


And*_*owl 6

当我用GCC编译它时,我收到以下警告:

warning: style of line directive is a GCC extension [enabled by default]
Run Code Online (Sandbox Code Playgroud)

换句话说,这不是标准C++,而是特定的编译器扩展(在这种情况下是预处理器扩展,特别是行指令).

因此,您应该参考编译器的文档来检查哪些是准确的,哪些是不允许的.例如,看到这个.