Loose-Info.com
Last Update 2021/09/23
TOP - 各種テスト - gcc - 警告関連のオプション - -Wunused-const-variable

-Wunused-const-variable=オプション引数(-Wunused-const-variable)
static const変数が宣言以外の部分で使用されていない場合に警告を出力
オプション引数が「1」 : インクルードされたヘッダファイルで宣言されたものを含まない
オプション引数が「2」 : ヘッダファイル(システムヘッダーを除く)で宣言されたものを含む

テスト概要

その1
オプション無し、-Wunused-const-variable、-Wallの各オプションを使用した際の警告出力例

その2
オプション引数に1、および2を指定した際の警告出力例

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


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

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

使用ファイル


sample.h
#include <stdio.h> static const int samp1_1 = 1; /* 未使用(ヘッダファイル) */ static const int samp1_2 = 1;

sample.c
#include "sample.h" static const int samp2_1 = 2; /* 未使用(関数外) */ static const int samp2_2 = 2; int main(void) { static const int samp3_1 = 3; /* 未使用(関数内ローカル) */ static const int samp3_2 = 3; static const int samp4_1 __attribute__ ((unused)) = 4; /* 未使用(関数内ローカル・unused属性指定) */ static const int samp4_2 __attribute__ ((unused)) = 4; printf("%d %d %d %d\n", samp1_2, samp2_2, samp3_2, samp4_2); return 0; }

その1

オプション無し、-Wunused-const-variable、-Wallの各オプションを使用した際の警告出力例

オプション無しで実行
$ ./a.out エラー・警告無し 1 2 3 4 $

-Wunused-const-variableオプションを指定して実行
$ gcc -Wunused-const-variable sample.c sample.c:8:19: warning: ‘samp3_1’ defined but not used [-Wunused-const-variable=] static const int samp3_1 = 3; /* 未使用(関数内ローカル) */ ^~~~~~~ sample.c:3:18: warning: ‘samp2_1’ defined but not used [-Wunused-const-variable=] static const int samp2_1 = 2; /* 未使用(関数外) */ ^~~~~~~ In file included from sample.c:1: sample.h:3:18: warning: ‘samp1_1’ defined but not used [-Wunused-const-variable=] static const int samp1_1 = 1; /* 未使用(ヘッダファイル) */ ^~~~~~~ $ ヘッダファイルで宣言されたものを含む未使用static const変数への警告 (unused属性指定された変数は警告対象外)

-Wallオプションを指定して実行
$ gcc -Wall sample.c sample.c: In function ‘main’: sample.c:8:19: warning: unused variable ‘samp3_1’ [-Wunused-variable] static const int samp3_1 = 3; /* 未使用(関数内ローカル) */ ^~~~~~~ At top level: sample.c:8:19: warning: ‘samp3_1’ defined but not used [-Wunused-const-variable=] sample.c:3:18: warning: ‘samp2_1’ defined but not used [-Wunused-const-variable=] static const int samp2_1 = 2; /* 未使用(関数外) */ ^~~~~~~ $ ヘッダファイルで宣言されたものを含まない未使用static const変数への警告 関数内に関しては、-Wunused-variableオプションに該当する警告も出力 (unused属性指定された変数は警告対象外)

その2

オプション引数に1、および2を指定した際の警告出力例

-Wunused-const-variable=1を指定して実行
$ gcc -Wunused-const-variable=1 sample.c sample.c:8:19: warning: ‘samp3_1’ defined but not used [-Wunused-const-variable=] static const int samp3_1 = 3; /* 未使用(関数内ローカル) */ ^~~~~~~ sample.c:3:18: warning: ‘samp2_1’ defined but not used [-Wunused-const-variable=] static const int samp2_1 = 2; /* 未使用(関数外) */ ^~~~~~~ $ ヘッダファイルで宣言されたものを含まない未使用static const変数への警告 (unused属性指定された変数は警告対象外)

-Wunused-const-variable=2を指定して実行
$ gcc -Wunused-const-variable=2 sample.c sample.c:8:19: warning: ‘samp3_1’ defined but not used [-Wunused-const-variable=] static const int samp3_1 = 3; /* 未使用(関数内ローカル) */ ^~~~~~~ sample.c:3:18: warning: ‘samp2_1’ defined but not used [-Wunused-const-variable=] static const int samp2_1 = 2; /* 未使用(関数外) */ ^~~~~~~ In file included from sample.c:1: sample.h:3:18: warning: ‘samp1_1’ defined but not used [-Wunused-const-variable=] static const int samp1_1 = 1; /* 未使用(ヘッダファイル) */ ^~~~~~~ $ ヘッダファイルで宣言されたものを含む未使用static const変数への警告 オプション引数無しと同じ内容の警告 (unused属性指定された変数は警告対象外)