之间是否存在任何差异:
if (!bool_function()) {
void_function();
}
和
bool_function() || void_function();
除了可读性?
即使第二个函数返回void,我也可以使用第二个表单吗?
在所有基于C语言的编程语言(C ++,C#,Java)中,如果void_function
返回true,则bool_function
不会被执行吗?
修改: 我问的原因是因为我的C编译器甚至没有发出任何警告,它按预期工作。我正在使用IAR Embedded Workbench IDE。
答案 0 :(得分:11)
嗯,是的,第二个没有编译。
你不能or
布尔和虚空。
更新:你说你的C编译器编译它并且它工作正常。我对此表示怀疑。也就是说,我确定你的编译器会编译它,但bool || void
的结果是什么? void
总是如此吗?总是假的?有时是一个,有时是另一个?
简而言之 - 不要这样做。使用第一个表单,告诉每个人正确阅读您的代码。
答案 1 :(得分:2)
Java specification表示如果左手一个为真,则不评估右手表达式。 C#似乎也是如此。如果你仔细研究C和C ++规范,他们会说同样的事情。
答案 2 :(得分:0)
如果没有编译错误,我认为它们是相同的。这种现象是所谓的短路评估
bool_function()|| void_function();
如果bool_function返回非零值,则无论返回void_function(),值或OR逻辑评估都将为 TRUE ,因此它将跳过执行后面的函数。
并非所有语言都描述这一特性,尤其是某些脚本语言。 短路评估会增加编译器实施的复杂性。