我寫了一個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
試圖直接回答你的問題:他們儘量不要。 –