【发布时间】:2018-03-25 09:29:20
【问题描述】:
我很好奇 C 标准关于条件子句中变量赋值的确切定义。这是一个小例子:
int foo() {
...
}
int bar() {
...
}
int main () {
int a, b, x, y;
...
if ( (a = foo()) == x && (b = bar() == y ) {
...
}
...
}
使用 GCC 的测试表明,如果 (a = foo()) != x,b = bar() 将不会被执行。一方面,这种行为是最佳的,因为它不会浪费任何时间来计算bar()。但另一方面,b 的值有些不确定,因为它取决于foo() 的结果,而这实际上与b 无关。
我想知道 C 标准中是否有针对此类情况的明确定义,以及该定义的原因是什么。最后,编写此类代码的最佳实践是什么?
【问题讨论】:
-
查找“短路评估”
-
哪些情况?请详细说明。
-
如果
if之后的代码依赖于b被初始化,那么“最佳实践”就是不要那样做。 -
请匹配括号。
-
这个问题的一些味道之前在 SO 上被问过 100 次。请在发布之前做一些研究。对于无论如何回答的人,请关闭投票,可以在SO C tag wiki FAQ 中找到规范的欺骗列表。
标签: c conditional variable-assignment