以下腳本的輸出爲20,但任何人都可以請詳細說明爲什麼它是如此,而不是110C:#定義使用
#include<stdio.h>
#define MAX 10
#define MAXLEN MAX+1
int main()
{
printf("%d", MAXLEN * 10);
getchar();
return 0;
}
以下腳本的輸出爲20,但任何人都可以請詳細說明爲什麼它是如此,而不是110C:#定義使用
#include<stdio.h>
#define MAX 10
#define MAXLEN MAX+1
int main()
{
printf("%d", MAXLEN * 10);
getchar();
return 0;
}
由於MAX
是10,MAXLEN
是10 + 1,並打印10 + 1 * 10是20
宏擴展替換字符串逐字,這就是爲什麼你必須將它們定義時使用括號。例如:
#define MAXLEN (MAX+1)
考慮一下這個擴展到
MAXLEN * 10 == MAX+1 * 10
這,當你考慮運算符優先級給
MAX + (1 * 10) == 10 + (1 * 10)
== 10 + 10
== 20
你可能想
#define MAXLEN (MAX+1)
改爲。
@simonrc http://stackoverflow.com/questions/18096361/c-define-usage#comment26489693_18096361 – 2013-08-07 06:47:04
@ H2CO3我同意這個問題不應該有重複的答案,但他的答案很好,解釋得很好。這對OP有幫助。 – Maroun
@MarounMaroun對不起,但這個問題不應該回答。它應該被標記爲重複。其他任何(包括「有用的」答案)只會鼓勵懶惰。 – 2013-08-07 06:52:41
MAXLEN * 10 => MAX + 1 * 10 => 10 + (1 * 10) => 20
運算符優先級:'10 + 1 * 10'是20,而不是110。但是,這是過度問這麼多,我覺得身體上的痛苦,當我看到這個問題的又一實例。 – 2013-08-07 06:44:08
#define只是一個替代品。 #define不是一個函數。 #define MAXLEN(MAX + 1)將產生110. – Naetmul
人們應該仔細閱讀C教程**。**我的意思是,閱讀,理解,記憶,你知道。 – 2013-08-07 06:45:48