xcorp::When it rains, it pours.

"The nice thing about rain," said Eeyore, "is that it always stops. Eventually."

!= 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) {
    :
}

と書きます。