C预处理器与变量的连接

时间:2012-12-17 22:39:03

标签: c variables concatenation c-preprocessor

  

可能重复:
  C preprocessor and concatenation

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

#define  WIDTH 32

int dataWIDTH;


// dataWIDTH should be interpreted as 'data32'

printf("%d",dataWIDTH);

2 个答案:

答案 0 :(得分:4)

您的使用案例需要双重操作;使用令牌粘贴(##)运算符本身只会追加预处理程序指令的名称。

#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;
}

答案 1 :(得分:1)

有一个名为##的令牌粘贴操作符,请在此处阅读:

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