【问题标题】:C macro functions - how to recognize a substring containing arg?C 宏函数 - 如何识别包含 arg 的子字符串?
【发布时间】:2022-08-07 22:17:39
【问题描述】:

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

#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 预处理器:

  • 如果宏 args 是它认为是 \'word\' 的子字符串,则无法识别它们
  • 不将_ 视为\'words\' 之间的有效分隔符

有没有办法解决这个问题来得到我想要的? (带有“装饰”名称的函数声明)。

谢谢。

标签: c macros c-preprocessor


【解决方案1】:

有没有办法解决这个问题来得到我想要的?

是的,连接标记。这就是## 的用途。

#define TEST_INSTRUCTIONS_SIZE(name) const uint16_t name##_size = ...

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 1970-01-01
    • 2011-05-26
    • 2012-04-23
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2016-09-10
    • 2021-12-18
    相关资源
    最近更新 更多