エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

二つの言語

C/C++における、プリプロセッサコンパイラ
わたしはC/C++プリプロセッサがどうも好きになれなくて。より正しくは、プリプロセッサのある種の書き方がすきになれなくて。

いわゆる、こういう書き方。

void foo()
{
#ifdef DEBUGGING
    デバッグのときだけほしいコード
#endif
    有効コード
    if(hoge)
    {
        有効コード
#ifdef DEBUGGING
        デバッグのときだけほしいコード
#endif
    }
    有効コード
#ifdef DEBUGGING
    デバッグのときだけほしいコード
#endif
}

基本的にコードを読みにくくするものが嫌い、というのと、コンパイルされないコードがあることが好きになれない理由です。
こういう↓書き方もあるんですが、これも見た目違和感があって好きになれず。コンパイルされないコードがあるのは一緒ですし。

#ifdef DEBUGGING
#define DEBUG_CODE(a) a
#else
#define DEBUG_CODE(a)
#endif

DEBUG_CODE(デバッグのときだけ欲しいコード)

コンパイラにすべて任せてしまって、最適化によって無用なコードが消えるのを期待するのがいいと思うんですけどねぇ。どちらの状況でも常にすべてコンパイルされますし(賢いコンパイラの場合、今度は警告がうるさかったりしますが)。

const bool Debugging = 
#ifdef DEBUGGING
    true;
#else
    false;
#endif

if(Debugging) { デバッグのときだけ欲しいコード }

今日、仕事で、こういったデバッグ用コードで倍にもふくれたコードを見てしまったもので。