cal*_*ter 144 c c++ boost 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
Run Code Online (Sandbox Code Playgroud)
在第4行,英镑符号后没有任何内容.这有什么影响?它是在C预处理器(CPP)规范中定义的吗?
由于Boost是一个跨平台的库,我认为任何CPP都应该正确解析它.在整个代码中使用随机井号/井号的影响/副作用是什么?
Jon*_*ely 185
一个#对自己上线有没有任何影响.我认为它被用于审美价值.
C标准说:
6.10.7空指令
语义
表单的预处理指令
# new-line没有效果.
C++标准说同样的事情:
16.7空指令[cpp.null]
表单的预处理指令
# new-line没有效果.
P45*_*ent 107
它使源代码看起来很漂亮,就是这样.
突出显示整个块是预处理器部分的事实.
事实上,C和C++预处理器都必须#在一条线上忽略.
too*_*ite 46
始终检查权威来源,而不是依赖其他资源.C标准化为ISO 9899 :: 2011,C++也有ISO标准.两者都被广泛接受,并通过简短搜索获得最终草稿.C标准在6.10.7中声明(C++有相同的文本):
表单的预处理指令
Run Code Online (Sandbox Code Playgroud)# new-line没有效果.
这是一个空指令,因为;核心语言中没有前面的表达式是一个空语句.
对于预处理器,它仅用于格式化/可读性以突出显示这些行在语义上属于一起.(分号OTOH在语义上相关).