此宏定义分成宏定义和问号表达式两部分为什么不行?
#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)。