c - 预处理器宏替换

标签 c macros c-preprocessor

#define LED1_ON() { /* twiddle port bit */ }
#define LED2_ON() { /* twiddle port bit */ }
//  ...
#define LED9_ON() { /* twiddle port bit */ }

#define LED_ON(x) LED##x_ON()

我想使用上面的代码(或类似的代码)让(例如)LED_ON(1) 调用宏 LED1_ON(),或 LED_ON(2) 调用宏 LED2_ON()

我相信可以让 cpp 执行此操作,但显然我的语法不正确。有谁知道使这成为可能的语法?

在我调用 LED_ON(2) 的那一行,gcc 给出了错误信息:

undefined reference to `LEDx_ON'

最佳答案

您需要将LED_ON定义为

#define LED_ON(x)  LED##x##_ON()

您想采用参数 x 并粘贴到 LED 前缀和 _ON 后缀。

关于c - 预处理器宏替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19505890/

相关文章:

c - 为什么指向结构的指针会使程序崩溃?

c++ - 不受主存储器约束的函数所需的复杂性是多少?

c++ - __PRETTY_FUNCTION__ : Can a return type contain parentheses?

macros - "macro annotations embedding in comments"在mcpp中是什么意思?

c - 预处理器平等测试,这是标准吗?

c - 在C 中使用define 指令定义数组?

c - 为递归函数绘制堆栈框架

c - 在 C 中索引数组会返回段错误

c - 如何在 C 中解析链接的宏?

syntax - 我什么时候应该使用 clojure 箭头宏?