重複の可能性:
Cプリプロセッサと連結
Cプリプロセッサを変数名と連結することは可能ですか?
#define WIDTH 32
int dataWIDTH;
// dataWIDTH should be interpreted as 'data32'
printf("%d",dataWIDTH);
重複の可能性:
Cプリプロセッサと連結
Cプリプロセッサを変数名と連結することは可能ですか?
#define WIDTH 32
int dataWIDTH;
// dataWIDTH should be interpreted as 'data32'
printf("%d",dataWIDTH);
ユースケースでは、二重のエスケープが必要です。トークン貼り付け(##)演算子を単独で使用すると、プリプロセッサディレクティブの名前が追加されるだけです。
#define WIDTH 32
#define _MAKEDATA(n) data##n
#define MAKEDATA(n) _MAKEDATA(n)
int MAKEDATA(WIDTH) = 7;
int _MAKEDATA(WIDTH) = 8;
int main(int argc, char *argv[]) {
printf("%d\n", data32);
return 0;
}
収量
$ gcc -E foo.c
int data32 = 7;
int dataWIDTH = 8;
int main(int argc, char *argv[]) {
printf("%d\n", data32);
return 0;
}
##というトークン貼り付け演算子があります。たとえば、ここでそれについて読んでください。
http://msdn.microsoft.com/en-us/library/09dwwt6y(v=vs.80).aspx