#include<stdio.h>
#define MAX(a,b) (a>b?a:b);
main()
{
int x;
x=MAX(3+2,2+7)
printf("%d",x);
}
我檢查過這個程序的輸出會是9.爲什麼?C程序輸出的原因
#include<stdio.h>
#define MAX(a,b) (a>b?a:b);
main()
{
int x;
x=MAX(3+2,2+7)
printf("%d",x);
}
我檢查過這個程序的輸出會是9.爲什麼?C程序輸出的原因
因爲一切正常,因爲它應該。
因爲2 + 7 = 9大於3 + 2 = 5。
儘管如此,通常在編寫這種類型的宏時,應該小心地將參數括在替換宏的表達式中,以避免有人通過運算符的優先級低於運算符你正在使用,從而搞砸你的表情。
所以,通常你會寫:
#define MAX(a,b) ((a)>(b)?(a):(b));
...因爲9是更大然後5? 我猜你真的在問它是如何工作的。 (可能要查找三元操作)所以...
#define MAX(a,b) (a>b?a:b);
是宏,名稱是MAX,它需要兩個值「a」和「b」。它是如何工作的,如果a大於b,則返回a,否則返回b。
在這種情況下3 + 2 = 5 = a和2 + 7 = 9 = b。所以宏觀歸結爲:
if (5 > 9)
return 5
else
return 9
那麼當你的代碼運行時,你能想到的宏調用與代碼替換:
void main()
{
int x;
if (5 > 9)
x = 5;
else
x = 9;
printf("%d", x);
}
很顯然,我們將返回9,存儲作爲'x'然後打印。
這有幫助嗎?
雅謝謝。我想知道它是如何工作的。這個宏定義是否替換了它被調用的地方? – user1324583
是的,如果我明白你在問什麼......宏就像一個函數,它允許你在一個過程之外定義一些功能,以便從範圍內的任何地方輕鬆地調用它。我會更新我的示例以向您展示。 – Mike
#define MAX(a,b) (a>b?a:b);
INT宏定義,三元如果espression ?:
作品這樣
條件? [值,如果條件爲真]:[值,如果條件沒有得到滿足]
條件是任何在C(因而0是假,其他一切都是真)
如果條件被滿足,則表達式evals表達有效到第一個值(?
之後的第一個值)或第二個值(:
之後的第一個值),如果不滿足條件
到目前爲止你期望的是什麼? (致敬「迄今爲止你做了什麼?」) –
請讓自己掌握好資源的書籍,網站,常見問題解答C.您指定'main'的方式表明您沒有任何體面的東西。 –