C 预处理器与变量的连接

Jea*_*ean 7 c variables concatenation c-preprocessor

可能的重复:
C 预处理器和连接

是否可以将C预处理器与变量名称连接起来?

#define  WIDTH 32

int dataWIDTH;


// dataWIDTH should be interpreted as 'data32'

printf("%d",dataWIDTH);
Run Code Online (Sandbox Code Playgroud)

use*_*691 9

您的用例需要双重转义;单独使用标记粘贴 (##) 运算符只会附加预处理器指令的名称。

#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;
}
Run Code Online (Sandbox Code Playgroud)

产量

$ gcc -E foo.c 
int data32 = 7;
int dataWIDTH = 8;

int main(int argc, char *argv[]) {
    printf("%d\n", data32);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 另外,请参阅 http://stackoverflow.com/questions/1489932/c-preprocessor-and-concatenation 对双重粘贴“技巧”的精彩讨论 (2认同)