gpt4 book ai didi

c - 宏作为另一个宏的参数

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

我正在尝试使用另一个预定义的宏将参数传递给宏 SETBIT:

#define SETBIT(ADDRESS,BIT,N) {(N) ? (ADDRESS &= ~(1<<BIT)) : (ADDRESS |= (1<<BIT))}
#define DAC_SYNC PORTB,3,POS
SETBIT(DAC_SYNC);

但是我收到错误:

macro SETBIT requires 3 parameters only 1 given

有一个article并提出以下建议:

防止算术运算嵌套错误:#define foo (a,b)#define bar(x) lose((x))

但即使我仍然有错误。顺便说一句,阅读我指出的文章我可以得出以下结论:预处理器扩展所有出现的宏。但实际上它看起来像宏 #define DAC_SYNC PORTB,3,POS 没有被预处理器扩展。

谁能更清楚地说明 GCC 的预处理器是如何工作的?

最佳答案

这个有效:

#define SETBIT2(ADDRESS,BIT,N) ((N) ? (ADDRESS &= ~(1<<BIT)) : (ADDRESS |= (1<<BIT)))
#define SETBIT(PARAMS) SETBIT2(PARAMS)
#define PORTB 5
#define POS 7
#define DAC_SYNC PORTB,3,POS

int main() {
int a = SETBIT(DAC_SYNC);
return 0;
}

关于c - 宏作为另一个宏的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021074/

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