warning: variable ‘x’ set but not used
警告:変数 ‘x’ は設定されたが未使用
[-Wunused-but-set-variable]
■コピペミスで設定後未使用
#include <stdio.h>
int abVScd(int a,int b,int c,int d) {
int ret1;
int ret2;
ret1 = a+b;
if(ret1 < 0) {
return -1;
}
ret2 = c+d;
if(ret1 < 0) {//文脈から ret2 の間違い(コピペミス)
return -1;
}
return (a+b) < (c+d);
}
int main(void) {
printf("%d\n",abVScd(1,2,3,4));
}
設定後未使用の問題は、
コピペの後で変数名を修正し忘れると発生しやすいです。
このプログラムは ret1 を ret2 に修正し忘れた例です。
■別変数に設定後未使用
#include <stdio.h>
int x_plus_y(int x,int y){
int ret = 0 ;
if(x && y){
int ret;
ret = x+y;//この ret と外の ret は別物
}
return ret ;
}
int main(void){
printf("%d\n",x_plus_y(1,2));//3を期待する
}
3行目の ret と
5行目の ret は別物なので、
6行目で ret を設定しても未使用となります。
■デッドコードで設定後未使用
#include <stdio.h>
//体積を求める
int get_volume(int x,int y,int z){
int volume=0;
int ret = 0 ;
if(x > 0){
if(y > 0){
if(x > 0){
volume = x*y*z ;//求めた体積を使っていない
} else{
ret = -1;
}
} else{
ret = -1;
}
} else {
ret = -1;
}
return ret;
}
int main(void) {
printf("体積 = %d\n",get_volume(2,3,4));
return 0;
}
変数 volume を使用していないので
何のための処理だったのか読み手にわかりません。
変数を使い忘れたデッドコードの可能性があります。
特に字下げの深い所で変数の値設定して
設定後未使用の警告が出る場合、
ソースコードが荒れている事を示唆しています。
■対策!変数は少ない方がいい
#include <stdio.h>
//体積を求める
int get_volume(int x,int y,int z){
if(x <= 0)
return -1;
if(y <= 0)
return -1;
if(z <= 0)
return -1;
return x*y*z ;
}
int main(void) {
printf("体積 = %d\n",get_volume(2,3,4));
return 0;
}