これはC99/C11(C++もあります)プリプロセッサとその標準準拠に関する質問です。ファイルの末尾に複数行のコメントとその埋め込み改行を前処理する
のは、2つのソースファイルを考えてみましょう:
/* I'm
* multiline
* comment
*/
と
/* I'm
* multiline
* comment
*/
i_am_a_token;
我々は(いくつかのバージョンがテストされた)のgccや打ち鳴らすとの両方のファイルを前処理する場合は、違いがあるでしょう。最初のケースでは、プリプロセッサは複数行のコメントから改行を保持しません。 2番目のケースでは改行がすべて保持されます。
すべて言及した基準は、(どこかに「翻訳フェーズ」内)は言う:
各コメントは、1つの空白文字に置き換えられます。改行文字は保持されます。
なぜファイルの最後に複数行のコメントを扱うのに違いがありますか?この動作は標準に準拠していますか?
理由はよく聞こえますが、それは標準によって許可されているか強制されていますか? – osgx
@osgx良い質問 - 答えを更新しました。 – TMS
@osgx私は、改行を保持する意図について@Tomasに同意します。それでも、それらを保持することは実装方法の1つに過ぎないと思われます(それらを破棄し、 '#行も発行する必要があります)ので、これを標準の問題とみなす傾向があります。実装ではありません。 – Chris