繁体   English   中英

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

[英]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都应该正确解析它。 在整个代码中使用随机磅/哈希符号会产生什么影响/副作用?

一条线路上的#根本没有任何影响。 我认为它被用于审美价值。

C标准说:

6.10.7空指令

语义

表单的预处理指令

# new-line

没有效果。

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

16.7空指令[cpp.null]

表单的预处理指令

# new-line

没有效果。

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

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

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

始终检查权威来源,而不是依赖其他资源。 C标准化为ISO 9899 :: 2011,C ++也有ISO标准。 两者都被广泛接受,并通过简短搜索获得最终草稿。 C标准在6.10.7声明 (C ++有相同的文本):

表单的预处理指令

 # new-line 

没有效果。

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

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

暂无
暂无

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

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