Toriyung

导航

C语言多行宏定义问题

#define portYIELD() \
{ \
    /*启动PENDSV中断*/ \
    portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \
    __dsb(portSY_FULL_READ_WRITE); \
    __isb(portSY_FULL_READ_WRITE); \
}

当宏定义内容很长时,为了美观进行换行,有几个问题需要注意,不然会引起报错

1. 注释

  注释不能使用整行注释即"//"符号,因为宏定义是在编译时进行文字替换,显而易见,换行符去掉之后,  "//"会将后面所有代码全部注释掉,造成代码缺失

2. 换行符"\"

  每一行要严格加上换行符(除了最后一行),换行符和前面一个符号至少保持一个空格距离,换行符后不能出现其他字符包括空格

3. 变量定义和赋值

  宏定义内如果需要进行的变量初始化,需要避开和其外部的变量名重复的情况,因为宏定义在预编译后直接替换进主文件中,其变量初始化并不是在局部堆栈空间,而是和主文件或者主函数共享同个堆栈空间,如果变量名重复会对外部的变量产生影响。

posted on 2022-11-14 17:05  Toriyung  阅读(447)  评论(0编辑  收藏  举报