gpt4 book ai didi

c - #在C中定义一个元组

转载 作者:太空狗 更新时间:2023-10-29 17:03:10 25 4
gpt4 key购买 nike

我希望能够定义一个元组来表示其他宏所需的参数。

我认为展示我想要的东西的最好方法是展示一个例子:

#include <avr/io.h>

#define LED_PORT PORTB
#define LED_DDR DDRB
#define LED_PIN PB7
#define LED LED_PORT, LED_DDR, LED_PIN

#define OUTPUT(port, ddr, pin) ddr |= 1 << pin

void main(void) {
OUTPUT(LED);
}

我希望将 OUTPUT(LED) 扩展为:

LED_DDR |= 1 << LED_PIN

我遇到的问题与扩展顺序有关,并导致以下错误:

macro "OUTPUT" requires 3 arguments, but only 1 given

这适用于带有定制构建硬件的 AVR 项目,我在其中定义了 LED 和其他具有相应 LED_PORT LED_DDRLED_PIN

然后我想定义更多的宏,这些宏可以接受这个 LED 并使用适当的参数映射到尽可能最简洁的方式。

使用标准的 C 预处理器这可能吗?

最佳答案

您可以向宏添加一个间接级别来实现此目的:

#define OUTPUT_I(port, ddr, pin) ddr |= 1 << pin
#define OUTPUT(spec) OUTPUT_I(spec)

在重新扫描期间,specOUTPUT_I 之前扩展,因此 OUTPUT_I 宏看到三个参数。

关于c - #在C中定义一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29897637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com