-2
當我在Linux上執行以下代碼時,輸出爲32.爲什麼這樣?m是一個定義爲10 + 2的宏;爲什麼m * m評估爲32?
#include <stdio.h>
#define m 10+2
int main() {
int i;
i = m * m;
printf("%d", i);
return 0;
}
當我在Linux上執行以下代碼時,輸出爲32.爲什麼這樣?m是一個定義爲10 + 2的宏;爲什麼m * m評估爲32?
#include <stdio.h>
#define m 10+2
int main() {
int i;
i = m * m;
printf("%d", i);
return 0;
}
i=m*m
實際上是計算爲
10 + 2 * 10 + 2
這是
10 + 20 + 2 = 32
#include<stdio.h>
#define m 10+2
int main()
{
int i;
i=(m)*(m); \\this will provide you with output as (10+2)*(10+2)
printf("%d",i);
return 0;
}
宏展開不聽從周圍的語法,所以i=m*m
被擴展到i=10+2*10+2
,而不是i=(10+2)*(10+2)
。這究竟是爲什麼每個人都應該加上括號宏定義和參數:
#define m (10+2)
我在下面的代碼中有關於宏功能的另一個疑問。 – RAMD 2014-12-04 19:09:26
錯誤的解決方案。總是把括號放在宏定義中,所以你不必在調用時考慮它。 – 2014-12-04 19:14:51
嗯..實際上Aasmund已經給出了這個解決方案,所以我去了一個備用的解決方案,以明確使用括號來執行多行操作。 – 3Demon 2014-12-04 19:18:56