C语言多行宏定义问题
#define portYIELD() \ { \ /*启动PENDSV中断*/ \ portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ __dsb(portSY_FULL_READ_WRITE); \ __isb(portSY_FULL_READ_WRITE); \ }
当宏定义内容很长时,为了美观进行换行,有几个问题需要注意,不然会引起报错
1. 注释
注释不能使用整行注释即"//"符号,因为宏定义是在编译时进行文字替换,显而易见,换行符去掉之后, "//"会将后面所有代码全部注释掉,造成代码缺失
2. 换行符"\"
每一行要严格加上换行符(除了最后一行),换行符和前面一个符号至少保持一个空格距离,换行符后不能出现其他字符包括空格
3. 变量定义和赋值
宏定义内如果需要进行的变量初始化,需要避开和其外部的变量名重复的情况,因为宏定义在预编译后直接替换进主文件中,其变量初始化并不是在局部堆栈空间,而是和主文件或者主函数共享同个堆栈空间,如果变量名重复会对外部的变量产生影响。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通