13

我的(相对较旧的)C++ 编译器在 Boost 中被这个文件阻塞,它的开头是:

# /* Copyright (C) 2001
#  * Housemarque Oy
#  * http://www.housemarque.com
#  *
#  * Distributed under the Boost Software License, Version 1.0. (See
#  * accompanying file LICENSE_1_0.txt or copy at
#  * http://www.boost.org/LICENSE_1_0.txt)
#  */
#

这真的是合法的 C++ 吗?预处理器标记的语法规则是什么?

4

1 回答 1

22

#的,标准 §16 [cpp] 明确允许仅包含空格的行:

control-line:
   # includepp-tokens 换行
   # define标识符替换列表换行
   # define标识符 lparen 标识符列表opt)替换列表换行
   # define标识符 lparen... )替换列表换行
   # define标识符 lparen 标识符列表, ... )替换列表换行
   # undef标识符 new -line
   # linepp-tokens new-line
   # errorpp-tokens opt new-line
   # pragmapp-tokens opt new-line
   #new-line

请注意,在翻译阶段 3,即在预处理器之前,注释被空格替换。

于 2012-08-11T07:28:42.730 回答