C 宏:Select 宏使用字符串和数字的串联

C Macros: Select macro using concatenation of string and number

我有大量以数字结尾的宏(不是我的):

#define MACRO_1 do_something1();
#define MACRO_2 do_something2();
#define MACRO_3 do_something3();
.
.

使用这些辅助宏:

#define TO_STRING(x) #x
#define SELECT_MACRO(id) "MACRO_"TO_STRING(id)

我希望能够 select 所需的宏,例如我正在这样做:SELECT_MACRO(3),问题是它被翻译成 "MACRO_""3" 由于此字符串中的双引号,我在代码中使用某些 API 时遇到问题。

有没有办法让它不带引号?

您可以使用 token concatenation 运算符 ##:

#define SELECT_MACRO(id) MACRO_##id

由此 SELECT_MACRO(1) 扩展为 MACRO_1


顺便说一句:

it's translated to "MACRO_""3" and I have a problem [...] due to the double quotes inside this string.

字符串中没有双引号。它是一个字符串 "MACRO_3"。相邻的字符串文字(此处 "MACRO_""3")被连接起来(在预处理之后)。