【发布时间】:2022-01-13 07:11:51
【问题描述】:
请查看以下 c 中的代码片段并查看 cmets。有没有办法让这成为可能?预处理器是否已经知道 spn_1 = 18?无论如何使用 spn_1 的值作为令牌名称?
#define TEST_M(_spn) struct astruct _test_struct_##_spn = { .spn = _spn, };
enum spns {
spn_1 = 18,
};
struct astruct {
int spn;
};
TEST_M(spn_1)
// What I want:
// struct astruct _test_struct_18 = { .spn = 18, };
// What I get:
// struct astruct _test_struct_spn_1 = { .spn = 18, };
// I can do, but I want attach a name to 18:
// TEST_M(18)
【问题讨论】:
-
枚举不是预处理器常量,因此您不能在预处理器阶段将其扩展为整数常量。
标签: c macros concatenation c-preprocessor