8

重複の可能性:
Cプリプロセッサと連結

Cプリプロセッサを変数名と連結することは可能ですか?

#define  WIDTH 32

int dataWIDTH;


// dataWIDTH should be interpreted as 'data32'

printf("%d",dataWIDTH);
4

2 に答える 2

11

ユースケースでは、二重のエスケープが必要です。トークン貼り付け(##)演算子を単独で使用すると、プリプロセッサディレクティブの名前が追加されるだけです。

#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;
}
于 2012-12-17T22:48:04.857 に答える
1

##というトークン貼り付け演算子があります。たとえば、ここでそれについて読んでください。

http://msdn.microsoft.com/en-us/library/09dwwt6y(v=vs.80).aspx

于 2012-12-17T22:44:09.073 に答える