3

次の形式の変数をいくつか作成したいと思います。

static char fooObjectKey;
static char bazObjectKey;
static char wthObjectKey;
static char myObjectObjectKey;
...

だから私は書いた

#define defineVar(x) static char #x ObjectKey

defineVar(foo);
defineVar(baz);
defineVar(wth);
defineVar(myObject);

しかし、エラーが発生します:Expected identifier or }

私はここで何が間違っているのですか?:)どんな助けも大歓迎です

4

4 に答える 4

8

それらを連結する必要があります:

#define defineVar(x) static char x##ObjectKey

説明:

プリプロセッサ演算子##は、マクロ展開中に実際の引数を連結する方法を提供します。置換テキストのパラメーターが##に隣接している場合、パラメーターは実際の引数に置き換えられ、##と周囲の空白が削除され、結果が再スキャンされます。たとえば、マクロ貼り付けは、その2つの引数を連結します。

#define paste(front, back) front ## back

したがってpaste(name, 1)、トークンを作成しますname1

于 2012-12-26T10:20:07.650 に答える
3

#マクロで引数を文字##列化するために使用され、マクロでの連結に使用されます...あなたの場合、次は正しい構文です..

#define defineVar(arg) static char arg##ObjectKey

これを使えば、

#define defineVar(x) static char #x ObjectKey

変数宣言は...

static char "foo" ObjectKey;
于 2012-12-26T10:26:36.467 に答える
1

連結にダブル ハッシュを使用する

#define defineVar(x) static char x##ObjectKey
于 2012-12-26T10:23:36.907 に答える
0
The ## operator concatenates two tokens into one token
Hence 
defineVar(foo) will be replace with static char fooObjectKey
于 2012-12-26T10:27:57.350 に答える