cppllを眺めていると、デバッグ出力用のコードを無効化にする話が議論されていました。[cppll:13624]
コード自体はいろいろあったのですが、その中の一つが次のコード。
#ifdef DEBUG #define DOUT std::cout #else #define DOUT 0 && std::cout #endif DOUT << "debug" << std::endl;このコードのうまいところは、0 &&の残りが評価されないところらしい[cppll:13648]。dead-code eliminationというらしい。
何が凄いって、次のコードがgcc 4.4.5で-pedantic-errors -O0オプション付きでコンパイルできた。
bool f(); // 宣言だけ int main() { if (false && f()) { } else { std::cout << "きえたよ" << std::endl; } }皆いろんなノウハウ持ってるなぁ...。
0 件のコメント:
コメントを投稿