繁体   English   中英

当一行中只有一个“#”时,C++ 预处理器会做什么 - 没有别的?

[英]What does a C++ preprocessor do when there's just a single `#` in a line - and nothing else?

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

#

这个如何:

# // a comment

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

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

注意:Travis CI 上的 Debian Bionic 上的 gcc 7.4.0 (截至撰写本文时)被此类线路绊倒。

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

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

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

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

执行预处理指令,...

预处理器指令有效,称为Null directive ,没有任何效果,如下所述:

形式的预处理指令

# 新队

没有效果。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM