Loose-Info.com
Last Update 2021/04/21
TOP - 各種テスト - gcc - 警告関連のオプション - -Wall

-Wall
一部の使用者に疑問視される構文で、使用を避ける事が容易なものに関する警告オプションを全て有効化
有効となる警告オプションのリストは Using the GNU Compiler Collection (GCC) を参照

テスト概要

-Wall オプションによる警告出力例と回避例

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

動作テスト

使用ファイル
sample1.c
#include <stdio.h> int main(void) { /* 関数内で使用されない変数の宣言 */ int n; long long ll; /* 初期化されない変数の使用 */ /* 対応する変数と型の異なる変換指示子 */ printf("ll = %d\n", ll); return 0; }

-Wall オプションを指定してコンパイル
$ gcc -Wall sample1.c sample1.c: In function ‘main’: sample1.c:12:16: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long long int’ [-Wformat=] printf("ll = %d\n", ll); 「long long int」の変数に対応する変換指示子が「%d」 ~^ ~~ %lld sample1.c:6:6: warning: unused variable ‘n’ [-Wunused-variable] int n; 使用されない変数「n」 ^ sample1.c:12:2: warning: ‘ll’ is used uninitialized in this function [-Wuninitialized] printf("ll = %d\n", ll); 初期化されていない変数「ll」 ^~~~~~~~~~~~~~~~~~~~~~~ $

警告を回避するために修正したソースファイル
sample2.c
#include <stdio.h> int main(void) { int n; long long ll; /* 各変数の初期化 */ n = 1; ll = 2; /* 変数 n をprintf()内で使用 */ /* 変数 ll に対応する変換指示子を %lld に修正 */ printf("n = %d : ll = %lld\n", n, ll); return 0; }

コンパイル実行
$ gcc -Wall sample2.c $ ./a.out 警告が全て解消され、実行ファイルを生成 n = 1 : ll = 2 $