void でキャストすることで "unused" の警告を回避する
元々は C言語?で使われているようなハックらしいのですが、知らなかったので覚書。
さて、例えば次のように関数の引数を assert
チェックしてる関数があるとします。
void func(int value){ assert(value == 42); }
この場合、デバッグビルドでは問題ないんですがリリースビルドでは『assert
で参照してる value
が使用されていない』とコンパイラが判断して、
warning: unused parameter 'value' [-Wunused-parameter]
という風な警告を出す可能性があります。
このような場合、次のように void
でキャストして回避することが可能です。
void func(int value){ (void)value; assert(value == 42); }
たまに (void)xxx;
しているコードを見かける事があるんですが、こういう理由だったんですね…。
ちなみに C++17 では [[maybe_unused]]
を使用して回避することが出来ます。
void // コンパイラに対して "使用されない可能性がある変数" として明示化する func([[maybe_unused]] int value){ assert(value == 42); }