Last Update 2021/09/23
-Wunused-const-variable=オプション引数(-Wunused-const-variable)
static const変数が宣言以外の部分で使用されていない場合に警告を出力
オプション引数が「1」 : インクルードされたヘッダファイルで宣言されたものを含まない
オプション引数が「2」 : ヘッダファイル(システムヘッダーを除く)で宣言されたものを含む
オプション引数が「1」 : インクルードされたヘッダファイルで宣言されたものを含まない
オプション引数が「2」 : ヘッダファイル(システムヘッダーを除く)で宣言されたものを含む
テスト概要
オプション無し、-Wunused-const-variable、-Wallの各オプションを使用した際の警告出力例
オプション引数に1、および2を指定した際の警告出力例
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
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;
}
オプション無し、-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属性指定された変数は警告対象外)
オプション引数に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属性指定された変数は警告対象外)