C/C++ 预处理器中单独一行的单个 pound/hash 符号 (#) 的用途是什么?

What is the purpose of a single pound/hash sign (#) on its own line in the C/C++ preprocessor?

我一直在查看 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 都应该正确解析它。 effect/side-effects 在整个代码中有随机 pound/hash 标志会是什么?

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

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

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

始终检查权威来源,而不是依赖其他资源。 C 被标准化为 ISO 9899::2011,C++ 也有一个 ISO 标准。两者都被广泛接受,通过简短搜索即可获得最终草案。 6.10.7 中的 C 标准状态(C++ 有很多相同的文本):

A preprocessing directive of the form

# new-line

has no effect.

这是一个 null 指令,就像核心语言中没有前置表达式的 ; 是一个 null 语句.

对于预处理器来说,formatting/readability 只是为了强调这些行在语义上属于一起。 (分号 OTOH 在语义上是相关的)。

A # 单独放在一行上根本没有效果。我认为它被用于审美价值。

C 标准说:

6.10.7 Null directive

Semantics

A preprocessing directive of the form

# new-line

has no effect.

C++ 标准说的是同样的事情:

16.7 Null directive [cpp.null]

A preprocessing directive of the form

# new-line

has no effect.