2016-08-24 26 views
0

該程序的輸出即將達到4.00000。 我不知道會發生什麼情況下首先乘以2,然後增量發生或乘以2增加c?在增量之前增加或乘法之後會發生什麼第一次乘法?

int main()   
{ 
int c=1; 
c=c+2*c++; 
printf("\n%f", c); 
return 0; 
} 
+1

首先會發生的事情(總是在這種情況下)是未定義的行爲。 – Haris

+0

閱讀此:http://stackoverflow.com/questions/7506704/difference-between-sequence-points-and-operator-precedence-0-o ...關鍵位:「這並不重要,由於運營商的優先順序兩個操作符的評估順序是明確的,因爲它們的副作用的處理順序仍然沒有定義。「 – Woodstock

+1

另外'%f'是浮點數,你打印的是一個int,所以使用'%d' – Caw

回答

0

這會調用未定義的行爲,這意味着任何事情都可能發生在您的程序中。

見C99規範,特別是J.2未定義行爲:

的行爲是不明確下列情況:[...]

  • 兩人之間的序列點,一個對象不止一次被修改,或者被修改並且先前的值被讀取,而不是確定要存儲的值(6.5)。

作爲拇指的「兩個序列點之間」的規則,兩個分號(;),該結束語句裝置之間。摘錄中提到的「對象」是變量c

這樣一來,我們可以清楚地看到對象在兩個序列點之間被修改了兩次。在表達式c++的評估期間修改過一次,在作業期間修改過一次。