2011-11-09 24 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

これは、マクロのネストとは関係ありません。問題は、あなたがint一部を削除する必要があります

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

です。このように:

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

あなたを:あなたはintままにした場合

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

は、プリプロセッサは期待するので、それはあなたに

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

を伝える理由です、別のパラメータとしてそれを解釈します実際にこの必要はありません:#define A(int x) printf("%d\n",x)

が必要です:#define A(x) printf("%d\n",x)、実際にプリプロセッサで変数を宣言する必要はありません! 、

Note that :プリプロセッサはキーワードについて何も知らない。

3

マクロパラメータは入力されません。それはすべてのシンボル置換です。これを試してみてください:

#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

関連する問題