读书人

此宏定义分成宏定义和问号表达式两部分

发布时间: 2012-06-19 14:45:20 作者: rapoo

此宏定义分成宏定义和问号表达式两部分为什么不行?
#define LS138a(x) x ? GPIO_ResetBits(GPIOB, GPIO_Pin_5) : GPIO_SetBits(GPIOB, GPIO_Pin_5)
#define LS138b(x) x ? GPIO_ResetBits(GPIOB, GPIO_Pin_4) : GPIO_SetBits(GPIOB, GPIO_Pin_4)
#define LS138c(x) x ? GPIO_ResetBits(GPIOB, GPIO_Pin_3) : GPIO_SetBits(GPIOB, GPIO_Pin_3)

分成:

#define LS138c(x) x
x ? GPIO_ResetBits(GPIOB, GPIO_Pin_3) : GPIO_SetBits(GPIOB, GPIO_Pin_3)

为什么行不通呢??

还有x ? GPIO_ResetBits(GPIOB, GPIO_Pin_3) : GPIO_SetBits(GPIOB, GPIO_Pin_3)这个表达式里的x为常量可不可以??

备注:我用的是Keil C51编译器

[解决办法]
你还是没有理解宏定义,以下面为例:
#define LS138a(x) x ? GPIO_ResetBits(GPIOB, GPIO_Pin_5) : GPIO_SetBits(GPIOB, GPIO_Pin_5)

你在应用的时候,你的语句是LS138a(y), 编译器在碰到这条语句的时候,给你编译成:y ? GPIO_ResetBits(GPIOB, GPIO_Pin_5) : GPIO_SetBits(GPIOB, GPIO_Pin_5)。然后在执行的时候,在,宏的值就是GPIO_ResetBits(GPIOB, GPIO_Pin_5) 或GPIO_SetBits(GPIOB, GPIO_Pin_5)。

读书人网 >C语言

热点推荐