Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 应该';如果';测试'==';或者'=';_C_If Statement - Fatal编程技术网

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是错误(例如)