【发布时间】:2012-02-17 23:56:10
【问题描述】:
我编写了一个 C 程序,然后在 MS Visual Studio 中编译并运行它,然后使用 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; -
结果有何不同?如果一个说“3.14159266666666”而另一个说“3.14159266666667”,你应该阅读"what every computer scientist should know about floating point"。
-
试图直接回答你的问题:他们尽量不这样做。
-
您也可能对 32 位和 64 位平台之间的差异有疑问。实际上,您应该向我们展示代码(或至少是发生差异的函数)。
标签: c visual-studio-2008 gcc