エラー:error: no newline at end of file [-Werror,-Wnewline-eof] の対処


Clang/LLVMコンパイラでこのようなエラーが発生してしまった。

error: no newline at end of file [-Werror,-Wnewline-eof]

「ファイルの末尾が改行じゃないぞこのやろう」という趣旨のエラーメッセージである。

対応方法

ソースファイルを改行で終わらせる必要がある。

これを

hello.h

#define hello puts("hello")

こうすれば良い。

hello.h

#define hello puts("hello")

エラーの目的

末尾改行の無いヘッダファイルを読み込むと、ソース展開時に直後のコードが連結されてしまう問題に遭遇する。

これが

#include "hello.h"
int main() {
  hello;
}

このように展開されてしまう。

#define hello puts("hello") int main() {
  hello;
}

ただ、ClangやGCC等のイカしたコンパイラ達は、このような問題が発生しないようにプリプロセッサ側で自動的に改行を挿入してくれる。なかなか気の利いた奴らである。

まとめ

ソースファイルは改行で終わらせるように習慣づけよう。

考察

警告ではなくコンパイルエラーになる所にClangコンパイラのお節介だがひたむきで極めて献身的な無償の愛を感じざるを得ない。

広告

関連するオススメの記事