2012-08-31 32 views
0
#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

到目前爲止你期望的是什麼? (致敬「迄今爲止你做了什麼?」) –

+1

請讓自己掌握好資源的書籍,網站,常見問題解答C.您指定'main'的方式表明您沒有任何體面的東西。 –

回答

10

因爲一切正常,因爲它應該。

0

因爲2 + 7 = 9大於3 + 2 = 5。

儘管如此,通常在編寫這種類型的宏時,應該小心地將參數括在替換宏的表達式中,以避免有人通過運算符的優先級低於運算符你正在使用,從而搞砸你的表情。

所以,通常你會寫:

#define MAX(a,b) ((a)>(b)?(a):(b)); 
2

...因爲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'然後打印。

這有幫助嗎?

+0

雅謝謝。我想知道它是如何工作的。這個宏定義是否替換了它被調用的地方? – user1324583

+0

是的,如果我明白你在問什麼......宏就像一個函數,它允許你在一個過程之外定義一些功能,以便從範圍內的任何地方輕鬆地調用它。我會更新我的示例以向您展示。 – Mike

2
#define MAX(a,b) (a>b?a:b); 

INT宏定義,三元如果espression ?:作品這樣

條件? [值,如果條件爲真]:[值,如果條件沒有得到滿足]

條件是任何在C(因而0是假,其他一切都是真)

如果條件被滿足,則表達式evals表達有效到第一個值(?之後的第一個值)或第二個值(:之後的第一個值),如果不滿足條件