!= FALSE
fj.comp.lang.c みたいだな(笑。でも某 ML の中のネタ。可読性を取るか,バグ回避を取るかですが,アタシは可読性を犠牲にしてでもバグ回避を取りますね。ま,トレードオフですね。んで,== TRUE に拘ってごちゃごちゃワケワカなマクロを書くぐらいなら,!= FALSE のが断然いいと思うんですがね。どうですかね。ついでに,!hoge も bool/boolean がサポートされていれば使いますけど,TRUE/FALSE の判定はもちろん,malloc() の戻り値の判定とか,strcmp() の戻り値の判定とかでは,明示的に == NULL とか == 0 なんて書きますね。つまり,
#define FALSE 0 #define TRUE 1 /* もしくは #define TRUE (!FALSE) */ int hoge; char *fuga; int piyo; hoge = function_returns_TRUE_or_FALSE(); if (hoge == TRUE) { : } fuga = malloc(...); if (!fuga) { : } piyo = strcmp(...); if (!piyo) { : }
というような書き方はせずに,
#define FALSE 0 #define TRUE 1 /* もしくは #define TRUE (!FALSE) */ int hoge; char *fuga; int piyo; hoge = function_returns_TRUE_or_FALSE(); if (hoge != FALSE) { /* if (hoge) とも書かないよ */ : } fuga = malloc(...); if (fuga == NULL) { : } piyo = strcmp(...); if (piyo == 0) { : }
と書きます。