我得到12
和49
從這個代碼怪異的結果,而使用前遞增和後遞增運營商
#include <stdio.h>
#define product(a) a*a
int main() {
int i = 3, j, k;
j = product(i++);
k = product(++i);
printf("%d %d\n", j, k);
return 0;
}
如果不是使用宏您使用的功能,那麼你獲得了9個和25個,其是我所期望的...
有人可以解釋爲什麼會發生這種情況嗎?
該代碼基本上使用宏來部分隱藏重複問題更明確地顯示的未定義行爲。問題是一樣的:序列點之間的'i'雙重增量導致未定義的行爲。 –
@JonathanLeffler其實我從前就知道,在同一句話中使用多個操作符會產生不確定的行爲,我遇到的問題是我不知道宏在做什麼...... – OiciTrap