繁体   English   中英

在条件中忽略“> 0”吗?

[英]Omit “> 0” in conditional?

我最近继承了一个旧项目,以进行一些优化并添加新功能。 在这个项目中,我在代码中看到了这种情况:

if (int_variable)

代替

if (int_variable > 0)

我只对boolean类型的变量使用了第一个选项。

您是否认为第一种选择是检查数字是否为正的“正确”方法?

负数也计算为true ,因此您应该使用if (int_variable > 0)来检查数字是否为正。

否。第一种选择是检查数字是否为非零的正确方法。

任何非零值都将被视为true ,因此,如果变量确实是int ,即带符号的,则带有>的版本会有些粗略。 为了清楚起见,我倾向于在很多情况下都将其明确,例如

if (int_variable != 0)

也许这有点令人费解(基本上是计算一个可以自动推断一个布尔值的布尔值),例如,我永远不会使用if (bool_variable == true) ,但我认为整数情况可以使测试更加清晰。 大声朗读这两种情况对于整数更有效。

if (int_variable)if (int_variable != 0)具有相同的含义。

除非您另外知道该值永远不会为负,否则这与if (int_variable > 0)不同。

在C中将整数值用作真值时,零将生成false而任何非零值都将生成true

在您的情况下,假设对int_variable进行了签名,则(int_variable) 等于(int_variable > 0)因为int_variable为负将分别产生truefalse


所以

if (int_variable) { … }

不是检查int_variable是否为正的正确方法。

在C语言中,任何计算结果为整数0空指针的表达式都被视为false。 还有其他的话。

所以基本上像

int i = ...;
if ( i )

测试i是否为0。但是,如果i为负,则条件也为true,因此不能替代i > 0 除非 i没有unsigned 仅仅因为它们不能是负面的。 但是您的编译器可能会警告此类构造,因为它们经常显示错误的概念。

谈到编码风格, if ( i )是真的与值0进行比较,则它是不好的风格。 您最好明确地进行比较: if ( i != 0 ) 但是,如果i包含一些布尔结果,则应使用“说”名称(例如isalpha('A')使用ctypes.h函数而不是变量),并且不要进行比较。 比较可读性:

char ch = ...;

if ( isalpha(ch) )

if ( isalpha(ch) != 0 )

对于后者,您必须考虑一下比较-不必要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM