2013-08-07 26 views
-4

以下腳本的輸出爲20,但任何人都可以請詳細說明爲什麼它是如此,而不是110C:#定義使用

#include<stdio.h> 
#define MAX 10 
#define MAXLEN MAX+1 

int main() 
{ 
    printf("%d", MAXLEN * 10); 
    getchar(); 
    return 0; 
} 
+8

運算符優先級:'10 + 1 * 10'是20,而不是110。但是,這是過度問這麼多,我覺得身體上的痛苦,當我看到這個問題的又一實例。 – 2013-08-07 06:44:08

+0

#define只是一個替代品。 #define不是一個函數。 #define MAXLEN(MAX + 1)將產生110. – Naetmul

+0

人們應該仔細閱讀C教程**。**我的意思是,閱讀,理解,記憶,你知道。 – 2013-08-07 06:45:48

回答

2

由於MAX是10,MAXLEN是10 + 1,並打印10 + 1 * 10是20

宏擴展替換字符串逐字,這就是爲什麼你必須將它們定義時使用括號。例如:

#define MAXLEN (MAX+1) 
2

考慮一下這個擴展到

MAXLEN * 10 == MAX+1 * 10 

這,當你考慮運算符優先級給

MAX + (1 * 10) == 10 + (1 * 10) 
       == 10 + 10 
       == 20 

你可能想

#define MAXLEN (MAX+1) 

改爲。

+0

@simonrc http://stackoverflow.com/questions/18096361/c-define-usage#comment26489693_18096361 – 2013-08-07 06:47:04

+2

@ H2CO3我同意這個問題不應該有重複的答案,但他的答案很好,解釋得很好。這對OP有幫助。 – Maroun

+0

@MarounMaroun對不起,但這個問題不應該回答。它應該被標記爲重複。其他任何(包括「有用的」答案)只會鼓勵懶惰。 – 2013-08-07 06:52:41

2
MAXLEN * 10 => MAX + 1 * 10 => 10 + (1 * 10) => 20