首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

此宏定义分成宏定义和问号表达式两部分为什么不行?该怎么解决

2012-06-19 
此宏定义分成宏定义和问号表达式两部分为什么不行?#defineLS138a(x) x? GPIO_ResetBits(GPIOB, GPIO_Pin_5

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

热点排行