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);
}

[参照]