我正在尝试定义以下宏函数:
#define TEST_INSTRUCTIONS_INPUT(name) const InstructionArray name =
#define TEST_INSTRUCTIONS_SIZE(name) const uint16_t name_size = sizeof(name) / sizeof(name[0]);
第一个有效,但第二个无效(name
未被替换(。
一般来说,F(x) x_name
似乎不会取代x
,因此F(test)
->x_name
,而不是test_name
我猜是C预处理器:
- 如果宏参数是它认为是"word"的子字符串,则不识别它们
- 不认为
_
是"单词"之间的有效delimeter
有办法解决这个问题吗?(具有"装饰"名称的功能划分(。
谢谢。
有办法解决这个问题吗?
是,连接令牌。这就是##
的作用。
#define TEST_INSTRUCTIONS_SIZE(name) const uint16_t name##_size = ...