可能重複:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
What problems might the following macro bring to the application?混亂與宏擴展
我寫了一個示例應用程序宏展開在我的iOS實現它(目標C代碼)。
它是這樣的:
#define SQUARE(x) (x * x)
main()
{
int i = 3, j, k ;
j = SQUARE(i++) ;
k = SQUARE(++i) ;
printf ("\nValue of i++ = %d\nValue of ++i = %d", j, k) ;
}
產量爲:
Value of i++ = 9
Value of ++i = 49
預計產量爲:
Value of i++ = 9
Value of ++i = 25
我對這個結果感到驚訝。我對這個宏觀擴張有點困惑。
爲什麼發生?請幫我找出原因。
我想你可以通過寫'#define SQUARE(x)((0,x)*(0,x))來修復代碼,它引入了一個序列點。你應該在每個宏參數中總括_括號,以避免錯誤。但清醒而明智的解決方案是不使用類似於函數的惡意宏,並始終將++運算符保留在自己的行上。 – Lundin