我很好奇C標準關於條件子句中變量賦值的確切定義。這裏是一個小例子:在條件變量賦值後&&(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標準中是否存在這種情況的明確定義以及該定義的原因是什麼。最後,什麼被認爲是最佳實踐編寫這樣的代碼?
查找「短路評估」 – Mat
哪些情況?請詳細說明。 –
如果'if'之後的代碼依賴於'b'被初始化,那麼「最佳實踐」就是不這樣做。 –