当一行中只有一个 `#` 而没有其他东西时,C++ 预处理器会做什么?

Rei*_*ica 3 c++ language-lawyer c-preprocessor

这是一个有效的 C++ 行吗?它是什么意思?

#
Run Code Online (Sandbox Code Playgroud)

这个如何:

# // a comment
Run Code Online (Sandbox Code Playgroud)

最近的编译器似乎忽略了它,没有错误也没有警告。

它“什么都不做”吗?我有一个头文件,其中在存在此类行的情况下使用 g++ 7.4.0 编译时,“兼容性”部分会爆炸。它似乎不会让编译器看到这条线被排除在非活动#if分支中。

注意:Travis CI 上的 Debian Bionic(撰写本文时)上的 gcc 7.4.0 被这些行绊倒了。

cig*_*ien 8

这两个例子都是有效的,它们什么都不做。

对于第二个示例,首先在翻译阶段 3中删除注释:

... 每条评论都由一个空格字符替换。保留换行符。...

这导致了第一种情况,它是在翻译阶段 4 中扩展的预处理器指令:

执行预处理指令,...

此预处理程序指令是有效的,并且被称为Null directive,并没有任何影响,因为规定在这里

形式的预处理指令

# 新队

没有效果。

其中new-line字面上是换行符。

因此,您显示的代码是有效的,并且应该被符合要求的实现所接受。