【C言語】
未使用引数警告の消し方 (unused parameter)

未使用引数 警告がうるさい

warning: unused parameter ‘argc’

警告:未使用引数
[-Wunused-parameter]

■未使用引数の警告が出る例

#include    <stdio.h>
//未使用引数の警告が出る
void    pre(int argc,char *argv[])
{
        printf("%s\n",argv[0]);
}
int main(int argc,char *argv[])
{
    pre(argc,argv);
    aft1(argc,argv);
    aft2(argc,argv);
}

未使用引数を削除できないか検討しましょう。
不要な引数であるならば削除しましょう。
static関数の場合は影響範囲がファイル内で閉じるので
積極的に修正しましょう。
外部関数の場合は影響範囲が広いので慎重な検討が必要です。

修正前:void pre(int argc,char *argv[])
修正後:void pre(char *argv[])


■単純には直せない時

関数ポインタテーブルから呼ばれて他の関数とインタフェースを統一する必要があるとか、
外部関数の影響範囲が広すぎてインタフェースを今さら修正できないときは
gcc -Wno-unused-parameter オプションで
警告を抑止する事もできます。

しかし一度この抑止オプションを使ってしまうとオプションを外す機会がなくなってしまい抑止オプション依存になってしまい、今後他の関数の不要な未使用引数を検出できなくなります。


この警告は多少面倒でも次のように修正すると良いでしょう。

■修正案A(unuse)

//(1):引数を unuse と言う名前に変更する->未使用だと人間には分る
void    aft1(int unuse,char *argv[])
{
        printf("%s\n",argv[0]);
}


1:未使用引数名をunused…に変える 
   ⇒未使用引数だと人間に分る


■修正案B(void)unuse

//(2):引数を(void)でキャストする->未使用だとコンパイラにも分る
void    aft2(int unuse,char *argv[])
{
        (void)unuse ;
        printf("%s\n",argv[0]);
}


2:(void)でキャストする    
   ⇒未使用引数だとコンパイラにも分る


■修正案C(unuse++)

void    aft3(int unuse,char *argv[])
{
        unuse++ ;
        printf("%s\n",argv[0]);
}


3:(void)でキャストしても、gcc以外のコンパイラによっては警告が消えない場合があります。その場合、
unuse++ 
とすると警告が消える場合があります。
無駄なコードが発生するかもしれませんがコンパイラの最適化に期待しましょう。


■アンケート

11
あなたの使っているgcc警告オプションを教えてください

参考:

MSC12-C. プログラムに対して作用しないコードを検出して削除する