gpt4 book ai didi

C 预处理器宏 : compacting code based on a single variance

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:11 25 4
gpt4 key购买 nike

我的问题是:我有一些看起来像这样的宏:

#define _EI_PORTLETTER 'D'
...code...
#if _EI_PORTLETTER == 'C'
#define _EI_VECTOR PORTC_VECT
if _EI_PORTLETTER == 'D'
#define _EI_VECTOR PORTD_VECT
#endif

然后在我的代码中我有:

ISR(_EI_VECTOR, ISR_NAKED) {
...code...
}

我希望能够做的是定义 _EI_PORTLETTER 而不必因为单个字母的变化而重写我的宏(因为它们有 6 个,我有_EI_PORTLETTERS 而不仅仅是“C”和“D”)。是否可以?也就是说,像这样:

#define _EI_PORTLETTER 'D'
...code...

#define _EI_VECTOR PORT _EI_PORTLETTER _VECT

#define _EI_VECTOR(x) PORT x _VECT

这样 _EI_VECTOR 或 _EI_VECTOR_(x) 解析为:

PORTD_VECT

(D 周围没有任何间距)。

这可以使用 C 宏吗?

这在我看来很简单,但我做不到。是的,我搜索了 Google 和 Stack Overflow,阅读了 GCC 文档。我一直无法弄清楚如何做我想做的事,甚至不知道这是否可能。

最佳答案

是的,这是可能的:

#define EI_PORTLETTER D
#define EI_VECTOR_(x) PORT ##x ##_VECT
#define EI_VECTOR2_(x) EI_VECTOR_(x)
#define EI_VECTOR EI_VECTOR2_(EI_PORTLETTER)

EI_VECTOR_ 宏使用标记粘贴运算符 ## 来构建所需的标识符。

EI_VECTOR2_ 宏用于间接访问 EI_PORTLETTER,以便将其扩展为 D 而不是仅仅粘贴为 EI_PORTLETTER

关于C 预处理器宏 : compacting code based on a single variance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28265877/

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