對於以下代碼:優先級是否使得<在==之前執行?
int main()
{
int a, b, c, d;
c = 5;
d = 5;
a = 10;
b = 8;
if (a == c++ && b < d++);
printf("c=%d d=%d\n", c, d);
return 0;
}
輸出:c=6 d=5
我知道由於在if語句第一表達式評估爲假,則第二個表達式不評估因此輸出。然而,我通過Balaguruswamy讀在ANSI C下面的話:
由於操作
<
相比==
享有更高的優先級,b < d++
被評估第一和然後a == c++
。
現在根據這一點,不應該的d
值成爲6
而不是c
?
子表達式的評估順序與結合性和優先級無關。關聯性和優先級確定操作符以什麼順序執行,但不確定子表達式的評估順序。運算符'&&','''''''就像引入了一個序列點。在&&,||的情況下操作員評估發生在從左到右的情況下,完整的表達式評估符合短路邏輯 –
本書中是否也包含與您正在引用的文本相關的代碼?報價中並沒有提及'&&'操作符 - 這在這段代碼中非常重要。 – nos
它與&&代碼相同。這本書是錯誤的。我只是在確認。我希望我們有一本毫不含糊的書。我的一半時間都在糾正這些書上浪費了! – user3152736