デバッグ用の Print 文や Assertion をコンパイルスイッチで無効化するということはよく行われます。 #ifndef NDEBUG #define TRACE(fmt, ...) printf(fmt, __VA_ARGS__) #else #define TRACE(fmt, ...) #endif しかし、上のような実装にしてしまうと、次のようなケースがリリースコンパイル時にエラーにならないということが起こります。 int a, b; ... TRACE("%d, %d, %d\n", a, b, c); ← c は未定義 もちろん、デバッグコンパイル時に「変数 c が定義されていない」といってコンパイラに怒られるので必ず気付くはずなのですが、ちょっとした変更だと手を抜いて片方のモードでしかコンパイルしないでチェックイン…なんてことをする人が現れて、事故が起こることもありま
![『コンパイルスイッチによるデバッグプリントの無効化』](https://cdn-ak-scissors.b.st-hatena.com/image/square/bd2ad9d1e3a5a1e757d39a027b8b91b2ebf131e5/height=288;version=1;width=512/https%3A%2F%2Fstat.profile.ameba.jp%2Fprofile_images%2F79%2Fwoooh-p%2F1173943050850.jpg)