「ファイル末尾に改行がありません」というコンパイラの警告 質問する

「ファイル末尾に改行がありません」というコンパイラの警告 質問する

一部の C++ コンパイラで次の警告が表示される理由は何ですか?

ファイルの最後に改行がありません

ソース/ヘッダー ファイルの最後に空行が必要なのはなぜですか?

ベストアンサー1

改行がない場合に発生する可能性がある問題をいくつか考えてみましょう。ANSI 標準によれば、ファイル#includeの先頭に があると、ファイルはそのままファイルの先頭に挿入され、ファイルの内容の後に新しい行は挿入されません。したがって、最後に改行がないファイルをパーサーに取り込むと、 の最後の行がの最初の行と同じ行にある#include <foo.h>かのように表示されます。foo.h の最後の行が改行のないコメントだった場合はどうなるでしょうか。これで の最初の行がコメント アウトされます。これらは、発生する可能性がある問題の種類のほんの一例です。foo.hfoo.cppfoo.cpp


関心のある方に、以下の James の回答をご案内したいと思います。上記の回答は C の場合にはまだ正しいですが、新しい C++ 標準 (C++11) は変更されたため、C++ と C++11 に準拠したコンパイラを使用する場合、この警告は発行されなくなりました。

James の投稿による C++11 標準より:

空ではなく、改行文字で終わらないソース ファイル、または、このようなスプライシングが行われる前に、改行文字の直前にバックスラッシュ文字が続くソース ファイルは、追加の改行文字がファイルに追加されたかのように処理されます (C++11 §2.2/1)。

おすすめ記事