[英]Order of evaluation for ternary operator in C
我知道根據標准, fun(++a, a)
應該避免,因為第二個參數沒有很好地定義。
但是,這種配方是否安全:
(++a ? a : 10);
我測試了這個片段,它按預期工作,即對於a = -1
它評估為10
,對於任何其他a
它評估為a+1
。 這是在標准中明確定義的,還是強烈依賴於編譯器?
這是很好定義的。
在三元表達式中,首先計算第一部分。 然后根據該值,評估第二部分或第三部分。 所以++a
保證在a
可能被評估之前被評估。
C 標准的第 6.5.15p4 節對此進行了解釋:
評估第一個操作數; 在它的求值和第二個或第三個操作數的求值之間有一個序列點(以求值者為准) 。 僅當第一個比較不等於 0 時才計算第二個操作數; 僅當第一個比較等於 0 時才評估第三個操作數; 結果是第二個或第三個操作數的值(以評估的為准),轉換為下面描述的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.