在 C/C 预处理器中单独一行上的单个井号/井号 (#) 的目的是什么?

新手上路,请多包涵

我一直在查看 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 都应该正确解析它。在整个代码中使用随机的井号/哈希符号会产生什么影响/副作用?

原文由 callyalater 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 388
2 个回答

一行上的 # 完全没有效果。我认为它被用于审美价值。

C标准说:

6.10.7 空指令

语义

形式的预处理指令

# new-line

没有效果。

C++ 标准也说了同样的话:

16.7 空指令 [cpp.null]

形式的预处理指令

# new-line

没有效果。

原文由 Jonathan Wakely 发布,翻译遵循 CC BY-SA 4.0 许可协议

它使源代码看起来很漂亮,仅此而已。

强调整个块是一个预处理器部分的事实。

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

原文由 P45 Imminent 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题