Last Update 2021/04/01
-Werror=警告指定子
警告指定子で指定した警告をエラーに変換
警告関連オプション -W*** の *** の部分を指定子として指定
警告関連オプション -W*** の *** の部分を指定子として指定
テスト概要
-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
/* -Werror= オプション動作確認用ソースファイル */
#include <stdio.h>
int main(void)
{
char c;
int n[3];
c = 0;
n[c] = 1;
printtf("n[0] = %d\n", n[c]);
return 0;
}
動作テスト
-Werror=オプション無しでコンパイル
$ gcc -Wall main.c <--- 警告オプションをまとめて有効にするため -Wall を使用
main.c: In function ‘main’:
main.c:11:3: warning: array subscript has type ‘char’ [-Wchar-subscripts]
n[c] = 1; 警告
^
main.c:13:2: warning: implicit declaration of function ‘printtf’; did you mean ‘printf’? [-Wimplicit-function-declaration]
printtf("n[0] = %d\n", n[c]); 警告
^~~~~~~
printf
main.c:13:26: warning: array subscript has type ‘char’ [-Wchar-subscripts]
printtf("n[0] = %d\n", n[c]); 警告
^
/usr/bin/ld: /tmp/ccWmnn80.o: in function `main':
main.c:(.text+0x31): undefined reference to `printtf'
collect2: error: ld returned 1 exit status
$ 全ての警告メッセージをそのまま出力
警告指定子として「char-subscripts」を指定してコンパイル(警告オプション : -Wchar-subscripts)
青色部は「char-subscripts」に関するメッセージ
青色部は「char-subscripts」に関するメッセージ
$ gcc -Wall -Werror=char-subscripts main.c <--- 警告オプションをまとめて有効にするため -Wall を使用
main.c: In function ‘main’:
main.c:11:3: error: array subscript has type ‘char’ [-Werror=char-subscripts]
n[c] = 1; エラーメッセージ
^
main.c:13:2: warning: implicit declaration of function ‘printtf’; did you mean ‘printf’? [-Wimplicit-function-declaration]
printtf("n[0] = %d\n", n[c]); 指定しないメッセージはそのまま警告として出力
^~~~~~~
printf
main.c:13:26: error: array subscript has type ‘char’ [-Werror=char-subscripts]
printtf("n[0] = %d\n", n[c]); エラーメッセージ
^
cc1: some warnings being treated as errors <--- 幾つかの警告をエラーに変換した旨のメッセージ
$