我在VC ++和GCC中编译了这个代码,产生了不同的输出,并且如果有人可以指出我出错的地方,我会很感激。
#include "stdio.h"
#define Cube(x) x*x*x
int main(void){
int x=5;
printf("%d\r\n", Cube(x++));
return 0;
}
在GCC中,显示的值为210(= 5 * 6 * 7),在VC ++ 2010中为125(= 5 * 5 * 5)。
如果我这样做,
#include "stdio.h"
#define Cube(x) x*x*x
int main(void){
int x=5;
printf("%d\r\n", Cube(++x));
return 0;
}
VC ++打印512(= 8 * 8 * 8),GCC打印392(= 7 * 7 * 8)。
感谢有人可以说最新情况。
答案 0 :(得分:3)
该行
printf("%d\r\n", Cube(x++));
预处理为:
printf("%d\r\n", x++*x++*x++));
这是未定义行为的原因。
printf("%d\r\n", ++x*++x*++x));
也是未定义行为的原因。
请参阅
Why the output of this program is 41? is it undefined behavior?
Why are these constructs (using ++) undefined behavior?
您可以通过将Cube
转换为函数来避免此问题。下面的程序表现良好。
#include "stdio.h"
int Cube(int x)
{
return x*x*x;
}
int main(void)
{
int x=5;
printf("%d\r\n", Cube(x++));
printf("%d\r\n", Cube(++x));
return 0;
}