gpt4 book ai didi

c - c中其他宏串联内的宏串联

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

我有以下宏:

#define    __IR( x )        ICU.IR[ IR ## x ].BIT.IR
#define _IR( x ) __IR( x )
#define IR( x , y ) _IR( _ ## x ## _ ## y )

我是这样使用的:

IR(SCI7, RXI7) = 0;

扩展为:

ICU.IR[ IR_SCI7_RXI7 ].BIT.IR = 0

我不想使用 SCI7RXI7,而是使用 sci(channel)rxi(channel)。所以我尝试创建以下宏:

#define _sci(x)  SCI ## x
#define sci(x) _sci(x)
#define _rxi(x) RXI ## x
#define rxi(x) _rxi(x)

#define channel 7

然后:

IR(sci(channel), rxi(channel)) = 0;

但是没有用。编译器返回给我:

Error[Pe017]: expected a "]"

我也一直在尝试其他方式,但没有成功。

我做错了什么?

最佳答案

整个宏用文字子表达式扩展,然后扩展结果表达式中的宏。

所以你可以这样写:

#define    __IR(x )      ICU.IR[ IR ## x ].BIT.IR
#define _IR(x, y) __IR(_ ## x ## _ ## y)
#define IR(x, y) _IR(x, y)

#define _sci(x) SCI ## x
#define sci(x) _sci(x)
#define _rxi(x) RXI ## x
#define rxi(x) _rxi(x)

#define channel 7

IR(sci(channel), rxi(channel)) = 0;

(我唯一真正改变的是 _IR 的定义。另外请注意,宏标识符和以下划线开头的符号是为编译器保留的,因此您可能想重命名您的辅助标识符宏。)

关于c - c中其他宏串联内的宏串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29848738/

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