Last Update 2021/04/02
-Wfatal-errors
最初に発生したエラーでコンパイルを中止
テスト概要
-Wfatal-errorsオプションの有無によるコンパイル時の挙動を比較
エラーメッセージ出力直後に処理を停止
-Werrorオプションにより変換されたエラーに対する挙動
警告から変換されたエラーの際も出力直後に処理を停止
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
使用ファイル
main.c
/* -Wfatal-errors オプション動作確認用ソースファイル */
#include <stdio.h>
int main(void)
{
int n;
printtf("-Wfatal-errors オプション動作確認用ソースファイル\n");
int n;
int n;
return 0;
}
-Wfatal-errorsオプション無しで実行
$ gcc main.c
main.c: In function ‘main’:
main.c:9:2: warning: implicit declaration of function ‘printtf’; did you mean ‘printf’? [-Wimplicit-function-declaration]
printtf("-Wfatal-errors オプション動作確認用ソースファイル\n"); 警告
^~~~~~~
printf
main.c:11:6: error: redeclaration of ‘n’ with no linkage
int n; エラーメッセージ
^
main.c:7:6: note: previous declaration of ‘n’ was here
int n; note
^
main.c:12:6: error: redeclaration of ‘n’ with no linkage
int n; エラーメッセージ
^
main.c:11:6: note: previous declaration of ‘n’ was here
int n; note
^
$ 全てのメッセージを出力して終了
-Wfatal-errorsオプション有りで実行
$ gcc -Wfatal-errors main.c
main.c: In function ‘main’:
main.c:9:2: warning: implicit declaration of function ‘printtf’; did you mean ‘printf’? [-Wimplicit-function-declaration]
printtf("-Wfatal-errors オプション動作確認用ソースファイル\n"); 警告(-Wfatal-errorsの作用は無し)
^~~~~~~
printf
main.c:11:6: error: redeclaration of ‘n’ with no linkage
int n; エラーメッセージ
^
compilation terminated due to -Wfatal-errors.
$ -Wfatal-errorsにより最初のエラーメッセージで停止
-Werrorオプションにより警告をエラーに変換した出力となるようにして実行
$ gcc -Werror -Wfatal-errors main.c
main.c: In function ‘main’:
main.c:9:2: error: implicit declaration of function ‘printtf’; did you mean ‘printf’? [-Werror=implicit-function-declaration]
printtf("-Wfatal-errors オプション動作確認用ソースファイル\n"); 警告から変換されたエラーメッセージ
^~~~~~~
printf
compilation terminated due to -Wfatal-errors. 警告から変換されたエラー出力で停止
cc1: all warnings being treated as errors <--- 全ての警告をエラーに変換した旨のメッセージ
$