预处理器宏替换

lon*_*ger 3 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()
Run Code Online (Sandbox Code Playgroud)

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

我相信有可能让cpp这样做,但显然我没有正确的语法.有没有人知道使这成为可能的语法?

在我调用的行上LED_ON(2),gcc给出了错误消息:

undefined reference to `LEDx_ON'
Run Code Online (Sandbox Code Playgroud)

Chr*_*odd 14

你需要定义LED_ON

#define LED_ON(x)  LED##x##_ON()
Run Code Online (Sandbox Code Playgroud)

你想拿参数x并粘贴LED前缀和_ON后缀.