1

C でマクロを使用して変数名を生成する必要があります。 # トークン貼り付け演算子が機能しているように見えますが、結果は常に文字列です。

#define     create_var( name )  char #name

名前が「名前」で(文字列として)展開されているため、機能しません。

#define     create_var( name )  char prefix##name

動作しますが、すべての変数にプレフィックスが付きます。

簡単な名前を取得するためのトリックはありますか?

create(test)拡大する

char test;

よろしくお願いします。

4

1 に答える 1

2

#前処理されたコードで変数名を変更せずに (接頭辞なしで) 表示したい場合は、マクロの正式なパラメーター名を使用します##

#引数を文字列定数に変換したい場合は、マクロ定義で行うことができます。また、トークンを連結して新しいトークンを作成するために使用できます##(たとえば、接頭辞や接尾辞などを使用して新しい変数名を作成する場合など)。これらのいずれも使用しない場合、プリプロセッサは一連のトークンを挿入して、変更せずにマクロに渡します (*)。

(*): C プリプロセッサのセマンティクスは微妙です。プリプロセッサ マクロは、マクロ展開中に複数の段階で置き換えられますが、これは非常に明白でない結果をもたらす可能性があります。

于 2013-07-16T22:13:25.890 に答える