c if 语句检查零

2 c if-statement zero

是否建议在c中这样写条件语句

if(foo != 0) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

或者像这样

if(foo) {
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)

我知道它们总是会产生相同的结果,但为了可读性,建议使用哪种方法?

chu*_*ica 5

考虑可能有的各种类型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) ...
Run Code Online (Sandbox Code Playgroud)

但要避免愚蠢的人

if (foobool == 0.0) ...
if (fooi != NULL) ...
Run Code Online (Sandbox Code Playgroud)

我什至没有接触尤达风格(试图避免圣战

if (0 == foo) ...
Run Code Online (Sandbox Code Playgroud)

一般来说,从积极的角度看待代码 if(foo)比从if (foo != 0)概念上更简单。我更if(foo == NULL)喜欢if(!foo)

你不认为避免否定负面因素并不是更容易理解,不是吗?