gpt4 book ai didi

c 宏,检查参数并用 nop 替换

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:23 26 4
gpt4 key购买 nike

我已经为我的 MCU 定义了一些用于 GPIO 切换(并设置模拟、数字等)的多级宏。使用海湾合作委员会。像这样

#define LED  B,2

gpio_make_amalog(LED)
gpio_high(LED)
gpio_low(LED)

等等。

问题是当我尝试重用代码时(比如最近的项目)我可能不会使用那个 gpio,所以在每个模块中我都必须去注释掉 LED 未定义

//gpio_low(LED)

问题是,有可能在该宏中测试宏参数,因此如果未定义 LED,则插入一个 Nop()。

提前谢谢你,

附言。

#ifdef 不太实用。我最近的例子是一个 4x4 列键盘矩阵代码,最近我想使用 3x4 键盘手机类型)

所以我有很多 if(gpio(COL1_ROW_4)) {} 需要评论。

如果 gpio() 宏更智能,nop 将使代码保持无害。

最佳答案

The question is, there is a possibility to test a macro parameter inside that macro, so if LED is not defined, a Nop() to be inserted.

您可以使用宏扩展玩各种有趣的游戏,但没有真正的条件。您所有严格基于宏的替代方案都围绕在不同情况下以不同方式扩展的宏。可以使用此类技巧来实现您的目标,但即使评估其可行性也需要更多地了解您的宏可以定义为采用的值。

您应该考虑不同的方法。例如,你拒绝让你的宏定义LED 等的定义为条件,但我认为让你的宏使用没有障碍以在它们的调用中使用的宏的定义为条件。也就是说,不是您当前的注释掉您不想要的宏调用的做法,而是将每个宏调用一劳永逸地包装在适当的条件编译指令中:

#ifdef LED
gpio_make_amalog(LED);
#endif

#ifdef COL1_ROW_4
if (gpio(COL1_ROW_4)) {
// ...
}
#endif

...甚至...

if (
#ifdef COL2_ROW_2
gpio(COL2_ROW_2)
#else
0
#endif
) {
// ...
}

这与将所有这些调用注释掉一次的工作量大致相同。

或者,如果您的用途涉及操纵整套适用的引脚,那么您可能会发现 X macro方法很有用。

关于c 宏,检查参数并用 nop 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41467442/

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