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

我一直在研究 加油库的源代码,我注意到通常有一个没有任何预处理器指令附加到它们的单磅符号。我通读了 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 都应该正确地解析它。在整个代码中使用随机的井号/杂凑符号会产生什么效果/副作用?

16305 次浏览

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

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

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

始终检查权威的资源,而不是依赖于其他资源。C 标准化为 ISO9899: : 2011,C + + 也有 ISO 标准。这两个都是很好的接受和最终草案可通过短期搜索。C 标准在 6.10.7中指出(C + + 的文本大致相同) :

表单的预处理指令

# new-line

没有效果。

这是一个 空指令,就像一个没有前面表达式的 ;在核心语言中是一个 空语句

对于预处理器,它只是为了格式化/可读性,以突出显示行在语义上属于一起。(分号 OTOH 在语义上是相关的)。

#单独在一行上没有任何作用。我猜是为了审美价值。

C 标准表示:

6.10.7空指令

语义学

表单的预处理指令

# new-line

没有效果。

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

16.7 Null 指令[ cpp.Null ]

表单的预处理指令

# new-line

没有效果。