这是C ++的有效行吗?它应该是什么意思?
#
这个呢?
# // a comment
[最近的编译器似乎忽略了它,没有错误也没有警告。
它“什么都不做吗?我有一个头文件,当使用g ++ 7.4.0编译时,如果出现这样的行,“兼容性”部分会爆炸。似乎看不到编译器看到不活动的#if
分支中排除了此行。
注意:Travis CI上Debian Bionic上的gcc 7.4.0(在撰写本文时)被此类行触发。
两个示例都是有效的,但是它们什么也不做。
对于第二个示例,首先在translation phase 3中删除注释:
...每个注释均替换为一个空格字符。换行符被保留。 ...
导致第一种情况,这是在translation phase 4中扩展的预处理程序指令:
执行预处理指令,...
此预处理程序指令有效,并且被称为Null directive
,如here所述:
形式的预处理指令
#新行
没有作用。
其中new-line实际上是换行符。
因此,您显示的代码是有效的,并且应该由一致的实现接受。