c如果声明检查为零

时间:2015-03-18 21:30:33

标签: c if-statement zero

在c中建议写这样的条件

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

或者像这样

if(foo) {
  // do stuff
}

我知道他们总会产生相同的结果,但建议使用哪种方法以提高可读性?

2 个答案:

答案 0 :(得分:2)

考虑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) ...

我甚至没有触及Yoda风格(试图避免holy war

if (0 == foo) ...

一般而言,从正面意义if(foo)if (foo != 0)中看代码在概念上更简单。我更喜欢if(foo == NULL)if(!foo)

你不认为避免否定否定是不可理解的,不是吗?

顺便说一句:

if (foofp != 0.0) ...
// is not the same as 
if (!(foofp == 0.0)) ...
// consider NaN

答案 1 :(得分:0)

我相信if(foo != 0)更清楚。有些人还表明,foo可以与0进行比较。

当我看到if(foo) foobool还是其他内容时?