Dar*_*ust 15
虽然这是一个品味问题,但我发现它几乎取决于意图.如果该值用作布尔值,!则没有问题.如果值正在计算某些东西,则平等更有意义.
if (!isVisible) {...}
if (isVisible == 0) {...} // Intention not as clear as line above.
if (numberOfItems == 0) {...}
if (!numberOfItems) {...} // Intention not as clear as line above.
Run Code Online (Sandbox Code Playgroud)
我总是喜欢第二种方式:
if (num == 0)
Run Code Online (Sandbox Code Playgroud)
作为num == 0或ptr == NULL评估为意图的布尔值.Java编译器强制执行此表单,但C/C++编译器不强制执行此表单.
最糟糕的例子是:
if (!strcmp(str, "something"))
Run Code Online (Sandbox Code Playgroud)
这实际上伪装了它的意图,因为strcmp函数族不返回布尔值,它们返回正数,零或负数(正如@JoachimPileborg所指出的那样).
但是,如果int用于表示布尔类型,而C没有内置类型,那么这个表单就可以了:
if (!b)
Run Code Online (Sandbox Code Playgroud)
但是这可以通过创建自定义类型进行自我记录:
typedef int bool;
#define true 1
#define false 0
bool b = true;
if (!b)
{
... etc
}
Run Code Online (Sandbox Code Playgroud)