省略"> 0"有条件的?

时间:2015-11-05 11:37:25

标签: c++ c coding-style

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

if (int_variable)

而不是

if (int_variable > 0)

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

您认为第一个选项是"正确"检查数字是否为正数的方法

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

没有。第一个选项是检查数字是否为非零的正确方法。

答案 2 :(得分:2)

任何非零值都将被视为true,因此,如果变量确实为>,即已签名,则int的版本有点粗略。为清楚起见,我更喜欢在许多情况下明确表示,即写

if (int_variable != 0)

这可能有点复杂(基本上计算一个可以自动推断的布尔值),我绝不会使用if (bool_variable == true),但我认为整数情况会使测试更清晰。大声读出两个案例对整数来说更好。

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

当使用整数值作为C中的真值时,零产生false,而任何非零值产生true

在您的情况下,假设int_variable已签名,(int_variable) 等同于(int_variable > 0),因为int_variable为否定将产生true和{分别为{1}}。

所以

false

检查if (int_variable) { … } 是否为正的正确方法。

答案 5 :(得分:1)

在C中,任何计算为整数0空指针的表达式都被视为false。其他任何事都是真的。

所以基本上像

int i = ...;
if ( i )

测试i是否为0.但是,如果i为负数,则条件也为真,因此这不是i > 0的替代。 除非 iunsigned。仅仅因为他们不能消极。但是你的编译器可能会警告这些结构,因为它们经常显示错误的概念。

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

char ch = ...;

if ( isalpha(ch) )

if ( isalpha(ch) != 0 )

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