C语言多行宏定义问题
#define portYIELD() \ { \ /*启动PENDSV中断*/ \ portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ __dsb(portSY_FULL_READ_WRITE); \ __isb(portSY_FULL_READ_WRITE); \ }
当宏定义内容很长时,为了美观进行换行,有几个问题需要注意,不然会引起报错
1. 注释
注释不能使用整行注释即"//"符号,因为宏定义是在编译时进行文字替换,显而易见,换行符去掉之后, "//"会将后面所有代码全部注释掉,造成代码缺失
2. 换行符"\"
每一行要严格加上换行符(除了最后一行),换行符和前面一个符号至少保持一个空格距离,换行符后不能出现其他字符包括空格
3. 变量定义和赋值
宏定义内如果需要进行的变量初始化,需要避开和其外部的变量名重复的情况,因为宏定义在预编译后直接替换进主文件中,其变量初始化并不是在局部堆栈空间,而是和主文件或者主函数共享同个堆栈空间,如果变量名重复会对外部的变量产生影响。