条件运算符返回的是一个值!!
#define DATA(n) (n==0)?(*(uint32_t *) addr0 : *(uint32_t *) addr2)
DATA(N) = 1
这样子编译器是会报错的!因为宏返回的是一个值类型,不是地址类型,赋值是不合理的
条件运算符返回的是后面表达式的值
#define DATA (*(uint32_t *) 0x320000)
DATA = 1
这样子是正确的,因为就是个宏,替换一下,没有这篇笔记的条件表达式
#define DATA(n) ( *(n==0)?((uint32_t *) addr0 :(uint32_t *) addr2))
DATA(N) = 1
这特么又是正确的,从上面那个例子演变下来
总结:条件表达式返回的是一个值,无类型