Denver Toha Asked:2022-08-03 04:25:18 +0000 UTC2022-08-03 04:25:18 +0000 UTC 2022-08-03 04:25:18 +0000 UTC 在宏内部创建结构时,如何根据传递给宏的值生成其名称? 772 #define EXAMPLE_MACRO(val_type, postfix) \ struct example_struct_postfix { \ val_type val; \ }; EXAMPLE_MACRO(int, name); 我想在这个例子中,生成的是example_struct_name,但是生成的是example_struct_postfix c gcc 2 个回答 Voted Best Answer HolyBlackCat 2022-08-03T04:43:30Z2022-08-03T04:43:30Z 像这样:example_struct_##postfix。 如果您将另一个宏作为名称传递,则将采用宏的名称,而不是其值。即:#define A B EXAMPLE_MACRO(int, A)-> example_struct_A。 如果这让您感到困扰,那么: #define CAT(x, y) CAT_(x, y) #define CAT_(x, y) x##y CAT(example_struct_, postfix) Fat-Zer 2022-08-03T04:43:17Z2022-08-03T04:43:17Z 为此,有一个运算符##对其参数执行宏扩展,然后连接结果: #define EXAMPLE_MACRO(val_type, postfix) \ struct example_struct_ ## postfix { \ val_type val; \ }; 有关详细信息,请参阅任何语言参考的宏部分。
像这样:
example_struct_##postfix。如果您将另一个宏作为名称传递,则将采用宏的名称,而不是其值。即:
#define A BEXAMPLE_MACRO(int, A)->example_struct_A。如果这让您感到困扰,那么:
为此,有一个运算符
##对其参数执行宏扩展,然后连接结果:有关详细信息,请参阅任何语言参考的宏部分。