這篇文章講的真好!
對於 "expr1 + expr2",(其中expr1,expr2都可能是復合表示式),不同的編譯器想先算exp1就先算exp1,想先算exp2就先算exp2。而且,編譯器不必保證exp1計算完畢之後才去計算expr2,它可以這麼做,也可以不這麼做。c語言標準裡並不做規定。
一段正常的程式不應該由於加號前後的求解順序不同而得到不同的結果。
因此,理解了結果不同的原因即可,沒必要討論結果到底是多少。
標準沒有規定C C 表示式求值順序
對於表示式,標準並沒有規定計算順序,所以下列 的執行結果存在多樣性 include stdio.h int main vc 6.0 m 4,n 7 vc 2013 m 4,n 9 gcc 4.1.2 m 4,n 7 gcc 4.6 m 4,n 7 gcc 4.7 m 4,n 7 gcc 4.7 c ...
c 表示式求值順序
今天寫了乙個搜尋函式,碰到了乙個有關表示式求值順序的bug,看下面兩段 這是為乙個向量寫的乙個搜尋函式,輸入乙個值,然後返回這個值在向量中的秩rank,如果該值在向量中存在多個,返回最大的,找不到返回 1 template rank yvector find const t e const temp...
表示式(二) 求值順序
基於 c primer p123 1.求值順序 優先順序 結合律 對於 f g h j 1 優先順序規定 g 的返回值於 h 的返回值相乘。2 結合律規定 f 的返回值先於 g 和 h 的乘積相加,隨後與 j 的返回值相加。3 對於這些函式的呼叫順序沒有規定。因此,若其中某幾個函式影響同一物件,就是...