2011-11-09 140 views
1
#include<stdio.h> 
#define A(int x) printf("%d\n",x) 
#define AS(A) A(20) 
typedef struct{ 
int *m; 
int n; 
int k; 
}st; 
//static st sb[10] = {AS(A)} 
int main() 
{ 
    AS(A); 
    return 0; 
} 

我收到如下錯誤。C中的嵌套宏

Line 14: error: macro parameters must be comma-separated 

請幫忙。

+0

感謝所有讓我明白了。謝謝 – Angus

回答

7

這與嵌套宏無關。問題是

#define A(int x) printf("%d\n",x) 

您必須刪除int部分。就像這樣:

#define A(x) printf("%d\n",x) 

如果離開了int,預處理器將其解釋爲另一個參數,這就是爲什麼它會告訴你

Line 14: error: macro parameters must be comma-separated 

,因爲預計:

#define A(int,x) printf("%d\n",x) 
2

你實際上不需要這個:#define A(int x) printf("%d\n",x)

但您需要:#define A(x) printf("%d\n",x),您實際上並不需要在預處理器中聲明變量! ,

Note that :預處理不知道什麼關鍵詞。

3

在C中,宏參數不鍵入。這是全部符號替代。試試這個:

#include<stdio.h> 
#define A(x) printf("%d\n",x) /*Remove the type */ 
#define AS(A) A(20) 
int main() 
{ 
    AS(A); 
    return 0; 
} 

看到codepad