次のようなコードがあります:
void foo (int, int);
void bar ( )
{
//Do Stuff
#if (IMPORTANT == 1)
foo (1, 2);
#endif
}
「IMPORTANT」なしでコンパイルすると、foo が定義されていて参照されていないというコンパイラの警告が表示されます。それで考えさせられました (それが問題です)。
そこで、この問題を修正するために、関数定義の周囲などに同じものを追加して#if (IMPORTANT == 1)
警告を削除しました。その後、その関数でその警告を抑制する別の方法があるのではないかと考え始めました。私は「未使用」の GCC 属性を調べていましたが、関数に設定できる同じ属性があるかどうかはわかりませんでした。その関数のみでその警告を抑制し、ファイルでは抑制しない別の方法があるのでしょうか。
ベストアンサー1
C++17 では、次のように関数を宣言できます[[maybe_unused]]
。
[[maybe_unused]] void foo (int, int);
これにより警告が抑制され、C++17 で未使用の可能性のある関数を表現する正しい慣用的な方法になります。