不同編譯器對於(a++)*(a++)和(a++)*(++a)和(++a)*(a++)和(++a)*(++a)的運算結果

1、(a++)*(a++)

#include <stdio.h>

#define SQUARE(a) ((a)*(a))
int main()
{
	int a = 5;
	int b;
	b = SQUARE(a++);
	printf("b=%d\n", b);
	return 0;
}
//25

2、(++a)*(++a)

#include <stdio.h>

#define SQUARE(a) ((a)*(a))
int main()
{
	int a = 5;
	int b;
	b = SQUARE(++a);
	printf("b=%d\n", b);
	return 0;
}
//49

3、(a++)*(++a)

#include <stdio.h>

#define SQUARE(a) ((a++)*(++a))
int main()
{
	int a = 5;
	int b;
	b = SQUARE(a);
	printf("b=%d\n", b);
	return 0;
}
//36

4、(++a)*(a++)

#include <stdio.h>

#define SQUARE(a) ((++a)*(a++))
int main()
{
	int a = 5;
	int b;
	b = SQUARE(a);
	printf("b=%d\n", b);
	return 0;
}
//36

雖然在windows7_64bit的VS2013上面和Redhat6.4_64bit的gcc、g++上面測試結果一致。(java編譯結果不是這樣,再次不給出代碼截圖,感興趣的自己去實驗。希望大家給出不同的測試結果)

但是:一個表達式對同一個變量進行兩個及兩個以上++的運算取決於編譯器的方式,編譯器不同結果也可能不同,因此建議不要在同一個表達式中對同一變量施行多次自增運算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章