[英]order of evaluation of || and && in c
如果&&的優先級大於||的優先級,則此代碼不應首先評估--b && ++ c,因此輸出應為1 2 411。但是在這里似乎短路了,得到1 2 5 10.請幫助!
int x;
int a=1,b=5,c=10;
x=a++||--b&&++c;
printf("%d %d %d %d\n",x,a,b,c);
return 0;
此代碼不應該首先評估--b && ++ c
沒有運算符優先級不會影響評估順序。 就是說
a++||--b&&++c
等價於
a++||(--b&&++c)
因此仍然是首先被評估a++
,從而使語句短路。
&&
的優先級更高,這意味着它與||
綁定比與||
更為緊密。 。 所以那個表達式等於
a++ || (--b && ++c)
||
僅當左側的表達式的計算結果為非0時,才對右側的事物進行計算。 由於a為1
,因此僅對a++
求值,並且b
不會遞減, c
不會遞增。
是的, &&
具有更高的優先級,但這僅確定操作數的分組 ,而不是求值順序 。 這里的基本操作是||
,這保證了如果左側為true則不會評估其右側,無論右側進行了什么操作。
這里有兩個概念在起作用
在C中,|| 運算符保持關聯。 結果,將首先評估a ++。 由於左側為TRUE, 編譯器優化 短路將確保||的右側 不求值,因為它不會更改表達式的結果。
懶惰的評價 。
--b && ++c
完全不評估。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.