2016-04-15 63 views
-3

首先,我想道歉,如果這個問題已經在這個論壇上提出過了。我搜索了,但找不到任何類似的問題。預增加後C中的增量

我是C的初學者。我正在瀏覽一個教程,遇到了一個代碼,我無法理解這個代碼。

下面是代碼 -

#include <stdio.h> 
#define PRODUCT(x) (x*x) 

int main() 
{ 
    int i=3, j, k; 

    j = PRODUCT(i++); 
    k = PRODUCT(++i); 

    return 1; 
} 

我試圖運行通過編譯器的代碼,並得到的溶液,作爲 「J = 12」 和 「k = 49」。

我知道#define是如何工作的。它用(x * x)代替PRODUCT(x)的每一次出現,但我無法理解的是j和k分別取值12和49。

任何幫助,將不勝感激。

謝謝您的時間。

+0

NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO! –

+1

'我搜查了,但是找不到任何類似的問題。'真? –

+1

「我無法理解的是,j和k如何獲得價值」 - 你的代碼也不行,所以你的公司很好。因此*未定義行爲的性質*。 – WhozCraig

回答

4

您的代碼將調用未定義的行爲。什麼事情都可能發生。在語句

j = PRODUCT(i++); 
k = PRODUCT(++i); 

宏將擴大到

j = x++ * x++; 
k = ++x * ++x; 

在兩個語句x正在修改多於兩個序列點之間一次。

+1

......並進入我本月的'Rep-PersonalServicesWorker of the month'bookmanrks。 –

+0

@MartinJames;那麼我已經收到你對這個問題的評論,不需要重複。無論如何它都是無禮的。不同的人有不同的色調。 – haccks