C 应该';如果';测试'==';或者'=';
C 应该';如果';测试'==';或者'=';,c,if-statement,C,If Statement,有什么特别的原因吗=将被使用超过== 我注意到=似乎更常见,但不知道这是否有原因。如果您有这样的代码: if (a == b) { // block 1 } else { // block 2 } 它可以重写为: if (a != b) { // block 2 } else { // block 1 } 这两个例子做了同样的事情。两者都不比另一个更有效。如果一个比另一个使用得多,则可能是个人偏好。您应该使用=或=根据您试图表达的逻辑条件。如果您同时关心tru
有什么特别的原因吗=代码>将被使用超过==
我注意到=代码>似乎更常见,但不知道这是否有原因。如果您有这样的代码:
if (a == b)
{
// block 1
}
else
{
// block 2
}
它可以重写为:
if (a != b)
{
// block 2
}
else
{
// block 1
}
这两个例子做了同样的事情。两者都不比另一个更有效。如果一个比另一个使用得多,则可能是个人偏好。您应该使用=
或=代码>根据您试图表达的逻辑条件。如果您同时关心true
和false
条件,即If
和else
部分,那么切换的净效果(如果是简单的比较)就是哪个代码需要出现在哪个部分
有一种编码风格,请参见(本书)编码完成关于正面构造布尔表达式的部分,这表明表示正面的布尔表达式比表示负面的布尔表达式更容易理解
如果您只关心计算结果为true
时的条件,例如,您只关心具有相等性(对于=
)或不具有相等性(对于!=
)时的条件,那么如果您选择了正确的部分,您就不需要使用else
部分。大多数情况下,使用!=或==将取决于内容:
resultOfOperationOrCall = operationOrCall(...);
if (resultOfOperationOrCall != somePredefinedErrorTypeValue) {
// Normal processing
} else {
// Exception/error processing
}
这里使用!=逻辑上比使用更清晰==我更喜欢=代码>因为它更明确(而且很少有机会将=
作为错误写入) 作为==和!=的汇编代码为x86体系结构提供高效或低效的代码。因此,这取决于您。您可以使用其中任何一种
如果对于某些机器来说,如果汇编代码不可用,那么高效或低效的情况就会显现出来,因为编译器通过执行一些额外的操作(即添加额外的汇编代码)实现了这一点。其完全和完全取决于用户的感知和需求。我看不出有什么理由要用它不止==你知道他们做不同的事情,对吧?我很好奇这是不是真的。我在GCC源代码中搜索了它,下面是我得到的:grep-b2“==”*.c | grep“if”| wc-l
:22.3k点击率。与相同的查询=代码>仅提供:9.6k点击率。看起来GCC开发者更喜欢=
。@ArjunShankar:我对Linux源代码做了同样的事情:=
出现137k次,而且=代码>仅出现83k次。数据似乎不支持问题中的断言。@GregHewgill-是。无论哪种方式,偏见都是一件有趣的事情。另一个有趣的统计数据是:“如果使用==
执行,则执行的频率有多高,对于执行此操作的频率有多高!”=代码>。每个语句的用途完全不同,一个是测试是否相等,另一个是测试除了相等语句外,其他语句是否相等。第二个版本确实有一个小小的优点,就是更难犯错误,只是偶然使用了一个=。@EdHeal true,但大多数(all?)执行此操作时,主要编译器将发出警告that@chochim:为什么会是这样?@chochem看这里-@stijn-问题是许多程序员确实忽略了警告。我个人不知道,但我参加过很多发出警告的项目或者==一次对CPU寄存器所有位进行比较为什么==
需要测试所有位?它只需要测试第一个不匹配项。如果除了最后一点之外,所有的都是一样的呢<代码>=在这种情况下,代码>仍然必须测试所有位。这里的==
和之间没有区别=代码>。如果你害怕打字错误,你如何避免写如果(resultofoperation或call==resultOK)
,那么有什么问题吗?我不知道怎么写=代码>在逻辑上比在此处使用==
更清晰。编写的代码不必要地脆弱。它假设没有特定错误与成功相同,这通常是一个错误的假设。如果该函数返回其他错误怎么办?即使它今天没有,如果它被更改以在将来返回其他错误呢?而且,我个人更喜欢先有失败的道路;它们通常很短,并且当故障路径在某个else
子句中时,很难遵循代码,该子句与if
条件相距几十行。如果您有一些预定义的ErrorTypeValue,但没有正常的结果值。在我的注释中,somePredefinedErrorTypeValue可能为null,任何不为null的内容都是正常的,只有null是错误(例如)