在#define子句中,如何使预处理器替换变量名中的参数?

我有以下代码:

#define MY_MACRO(PARAM) int PARAM_int; double PARAM_double; [subsequent instructions] 

不幸的是,它不起作用,这意味着PARAM不会在变量名称中被替换。 这可以解决吗?

PARAM_int被认为是单个令牌,与PARAM不同。 您可以使用##在宏定义中连接标记:

 #define MY_MACRO(PARAM) int PARAM ## _int; double PARAM ## _double; 

现在, PARAM将扩展为您调用宏的任何内容,然后生成的令牌将与_int_double粘贴在一起。