1. ホーム
  2. c++

[解決済み] 「ファイル末尾に改行がない」コンパイラの警告

2022-04-19 13:55:15

質問

一部のC++コンパイラで、次のような警告が出るのはなぜですか?

ファイル末尾に改行がない

なぜソース/ヘッダーファイルの最後に空行を入れなければならないのですか?

どのように解決するのですか?

改行がない場合に起こりうる問題をいくつか考えてみましょう。ANSI規格によると #include の後に改行を挿入せず、そのままファイルの先頭に挿入します。 #include <foo.h> の後に、ファイルの内容が表示されます。したがって、もし最後に改行がないファイルをパーサーにインクルードすると、あたかも最後の行が foo.h の最初の行と同じ行にある。 foo.cpp . foo.hの最終行が改行なしのコメントだったらどうでしょう?ここで、最初の行の foo.cpp がコメントアウトされています。これらは、忍び寄る問題の種類のほんの一例です。


以下のJamesの回答について、興味のある方にお伝えしたいと思います。C言語については上記の回答が正しいのですが、新しいC++規格(C++11)では、C++とC++11に準拠したコンパイラを使用している場合、この警告はもはや発せられないように変更されました。

Jamesの投稿を経由してC++11標準から。

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