C宏函数-如何识别包含arg的子字符串



我正在尝试定义以下宏函数:

#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 = ...

最新更新