私は、フラグが設定されているときに多くのエラー報告とログを行う C コードに取り組んでいます。フラグが設定されていない状態でコンパイルすると、未使用の変数の警告DEBUG
が生成されることがあります。DEBUG
#ifdef DEBUG
#define CHECK(expr) foo(expr)
#else
#define CHECK(expr)
#endif /* DEBUG */
int x = bar(a, b, c); /* bar has to be called for both DEBUG begin defined and undefined */
CHECK(x == SOME_VALUE); /* Produces an "unused variable" warning if DEBUG is undefined
編集: ちょっとしたメモ (それが重要かどうかは不明):CHECK
マクロの引数は式であり、単一の variable ではありません。
このパターンで、未使用の変数の警告を取り除く最善の方法は何ですか?
私が試したこと/考えたこと:
#ifdef DEBUG
int x = bar(a, b, c);
#else
bar(a, b, c);
#endif
CHECK(x == SOME_VALUE);
bar
次に、 (実際の呼び出しではより複雑な)への呼び出しを 2 回記述することを避けるために、次のようにします。
#ifdef DEBUG
int x =
#endif
bar(a, b, c);
CHECK(x == SOME_VALUE);
ただし、これは正確にクリーンで読みやすいソリューションではないように感じます。より良い方法はありますか?パフォーマンス上の理由から、が定義されCHECK(expr)
ていない場合、マクロはコードを生成しないことに注意してください (編集:したがって、評価されるべきではありません)。DEBUG
expr
上で概説した方法よりもエレガントな方法はありますか?