c if语句检查零

c if statement check for zero

c中是否推荐这样写条件

if(foo != 0) {
    // do stuff
}

或者像这样

if(foo) {
  // do stuff
}

我知道它们总是会产生相同的结果,但为了便于阅读,推荐使用哪种方法?

相信if(foo != 0)更清楚。它在某种程度上也表明 foo 可以与 0.

进行比较

当我看到 if(foo)foo 一个 bool 还是其他东西?

考虑 foo 可能具有的各种类型。最好的是上下文相关。

我喜欢每组第一名。

void *fooptr = bar();
if (fooptr) ...
if (fooptr != NULL) ...
if (fooptr != 0) ...

int fooi = bar();
if (fooi != 0) ...
if (fooi) ...

double foofp = bar();
if (foofp != 0.0) ...
if (foofp) ...

bool foobool = bar();
if (foobool) ...

int (*foofun)() = bar();
if (foofun) ...
if (foofun != NULL) ...
if (foofun != 0) ...

但要避免愚蠢的

if (foobool == 0.0) ...
if (fooi != NULL) ...

而且我什至没有碰 style (trying to avoid a holy war)

if (0 == foo) ...

一般来说,从积极的意义上看代码 if(foo)if (foo != 0) 相比,在概念上更简单。我更喜欢 if(foo == NULL) 而不是 if(!foo)

你不认为避免否定否定不是更容易理解吗?