当一行中只有一个#时,C ++预处理器会做什么-别无其他?

问题描述 投票:2回答:1

这是C ++的有效行吗?它应该是什么意思?

#

这个呢?

# // a comment

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

它“什么都不做吗?我有一个头文件,当使用g ++ 7.4.0编译时,如果出现这样的行,“兼容性”部分会爆炸。似乎看不到编译器看到不活动的#if分支中排除了此行。

注意:Travis CI上Debian Bionic上的gcc 7.4.0(在撰写本文时)被此类行触发。

c++ language-lawyer c-preprocessor
1个回答
3
投票

两个示例都是有效的,但是它们什么也不做。

对于第二个示例,首先在translation phase 3中删除注释:

...每个注释均替换为一个空格字符。换行符被保留。 ...

导致第一种情况,这是在translation phase 4中扩展的预处理程序指令:

执行预处理指令,...

此预处理程序指令有效,并且被称为Null directive,如here所述:

形式的预处理指令

#新行

没有作用。

其中new-line实际上是换行符。

因此,您显示的代码是有效的,并且应该由一致的实现接受。

© www.soinside.com 2019 - 2024. All rights reserved.