C预处理器与变量串联

可能重复:
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