2017-07-15 59 views
0

這裏很簡單的C程序:後增量如何在c中工作?

int main() 
{ 
    int i = 22; 
    printf("%d %d %d",i,i++,i); 
    return 0; 
} 

結果是:

23 22 23 

究竟崗位增量是在這裏工作?

+1

歡迎來到未定義的行爲!這是一個神祕和痛苦的美妙之地。更多在這裏:https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points – user4581301

+0

好點。 OP希望C. C和C++之間的規則有點不同,特別是在C++ 11之後。 – user4581301

回答

1

根據您得到的結果來判斷i ++是否被評估並返回預增值。然後,i的值,i ++的返回值和i的值被傳遞給打印函數。

這不是你應該依賴的東西,因爲你可能會在不同的編譯器或不同的優化設置下得到不同的答案。如在另一個答案中,參數評估的順序是未定義的行爲。

2

在這種情況下,您無法正確測試。

函數參數的參數評估順序未定義,因此您將獲得平臺相關的結果。

i ++的實際工作方式是首先返回舊值並稍後遞增,但這是一個糟糕的測試。