ARM中关于字段操作宏定义的问题
在编程stm32f10x时候运用到字段操作
#define BITBAND(addr,bitnum) ((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum))
在编程时候发现,不加宏定义中括号(红色标记)时候确编程错误,而加了宏定义中的括号确能得到结果
请问宏定义中加括号和不加括号有什么区别?
[解决办法]
涉及到运算符优先级的问题,加与不加括号,运算有天壤之别。
但是个人觉得报警告是必须的,至于报错误这个与编译器有关。