7

与えられた:

#error /*
*/ foo

Microsoft C++ は/*、GCC 出力のエラー メッセージを出力しますfoo

どちらが正しい?

4

2 に答える 2

7

GCCは正しいです。

コメント (改行を含む) の置換は、翻訳フェーズ 3 で行われ、翻訳フェーズ 4 で前処理が行われます (ISO/IEC 9899:1999、§5.1.1.2)。

したがって、コンパイラの前処理部分は改行を「認識」しなくなります。

そして、#error次のように定義されています (§6.10.5):

フォームの前処理ディレクティブ

# error pp-tokens_opt new-line

実装により、指定された一連の前処理トークンを含む診断メッセージが生成されます。

したがって、fooは出力の一部である必要があります。

于 2013-06-10T09:11:04.133 に答える
2

標準では単一のスペースに置き換える必要があるため、GCC は正しいです/ * ... * /

于 2013-06-10T09:10:18.447 に答える