在C/C++预处理程序中,在自己的行上使用单个磅/散列符号(#)的目的是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我一直在寻找Boost库的源代码,并且我已经注意到,通常没有任何预处理器指令附加在它们上面的单个井号。我阅读了GCC预处理器手册和规范指南,并且找不到任何相关内容。

(1) #ifndef BOOST_CONFIG_HPP
(2) #  include <boost/config.hpp>
(3) #endif
(4) #
(5) #if defined(BOOST_HAS_PRAGMA_ONCE)
(6) #  pragma once
(7) #endif

在第4行,英镑符号后没有任何东西。这有什么影响?它是否在C预处理器(CPP)规范中定义?

由于Boost是一个跨平台的库,我认为任何CPP都应该正确解析它。整个代码中随机英镑/散列符号的效果/副作用是什么?

提问于
用户回答回答于

一个#对自己上线有没有任何影响。

C标准说:

6.10.7空指令 语义 表单的预处理指令 # new-line 没有效果。

C ++标准也是这样说的:

16.7空指令[cpp.null] 表单的预处理指令 # new-line 没有效果。

用户回答回答于

它使源代码看起来很漂亮,就这些。

突出显示整个模块是预处理器部分的事实。

事实上,C和C ++预处理器必须忽略#一行。

扫码关注云+社区