gpt4 book ai didi

c - #define语句解释

转载 作者:太空宇宙 更新时间:2023-11-04 05:37:36 24 4
gpt4 key购买 nike

我正在查看老师给我的代码,我遇到了这个:

#define setBit(var, bitnum)   (var)|=(1<<(bitnum))
#define resBit(var, bitnum) (var)&=~(1<<(bitnum))
#define ROW_RESET setBit(PORTA,4) ; resBit(PORTA,4)

前两个 #define 语句是不言自明的,但我在理解第三个时遇到了问题。第三个说法(行)对吗?我们可以在分号 (;) 之后写语句吗,如果可以,请您解释一下这里发生了什么。

最佳答案

分号可以用在宏定义中,并且只会使宏扩展为多个语句:

ROW_RESET;

将扩展到

setBit(PORTA,4) ; resBit(PORTA,4);

也可以使用例如宏定义中带有花括号的 block 语句,只要展开后的结果在句法上有效(在展开处)。

像往常一样,你在宏中做的越“花哨”的东西,就越容易出错 - 例如,如果你有一个带有签名的函数 void foo(int),您可以调用 foo(setBit(PORTA, 4)),但是 foo(ROW_RESET) 不会编译,因为它会扩展为 foo(setBit( PORTA,4) ; resBit(PORTA,4))(这是非法的,因为函数调用中不能有分号)。

关于c - #define语句解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28949622/

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