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識別子replacement-list改行識別子
   # definelparen識別子-listoptreplacement-list改行識別子lparenreplacement -list改行識別子lparen識別子-listreplacement-list改行識別子new -line pp-tokens new-line pp-tokens opt new-line pp-tokens opt new-line new-line)
   # define... )
   # define, ... )
   # undef
   # line
   # error
   # pragma
   #

コメントは、変換フェーズ3、つまりプリプロセッサの前で空白に置き換えられることに注意してください。

于 2012-08-11T07:28:42.730 に答える