我写了一个C程序,然后在MS Visual Studio中编译并运行它,然后使用GCC。该程序进行了一些简单的数学计算。但是我从两者得到的输出/结果是不同的。该程序基于宏。不同的结果使用MS Visual Studio vs GCC
这些编程环境是否有不同的宏处理方式?如果是这样,有什么区别?
编辑:对不起,这是代码。
#include <stdio.h>
#define mac(a,b) a*a + b*b - 2*a*b
int func(int a, int b) {
return (a*a + b*b - 2*a*b);
}
main() {
int f, g, i, j, x, y;
printf("Please enter two integers\n");
scanf("%d%d", &f, &g);
printf("f = %d\tg = %d\n", f, g);
i = f;
j = g;
x = func(i, j);
y = mac(i, j);
printf("x = %d\ty = %d\n", x, y);
x = func(++i, ++j);
i = f;
j = g;
y = mac(++i, ++j);
printf("i = %d\tj = %d\n", i, j);
printf("x = %d\ty = %d\n", x, y);
}
下面是使用VS输出:
f = 7 g = 8
x = 1 y = 1
i = 10 j = 11
x = 1 y = 1
而且使用GCC:
f = 7 g = 8
x = 1 y = 1
i = 10 j = 11
x = 1 y = -39
的区别是最后一个Y值。所以我想知道不同的编译器是否以不同的方式处理宏的过程?
向我们展示一些代码。你可能有某种未定义的行为,例如'x = x ++ + ++ x;' – Mysticial
结果有多不同?如果有人说“3.14159266666666”,而另一个说“3.14159266666667”,你应该阅读[“每个计算机科学家应该了解的浮点数”](http://docs.oracle.com/cd/E19957-01/806-3568/ ncg_goldberg.html)。 – pmg
试图直接回答你的问题:他们尽量不要。 –