GCC宏与注释相关异常问题咨询:注释多行宏后残留反斜杠导致printf语句未执行
GCC宏与注释相关异常问题咨询:注释多行宏后残留反斜杠导致printf语句未执行
兄弟,这其实不是GCC的bug,是预处理器的正常行为哦!
咱们来拆解一下原因:预处理器处理代码的顺序里,反斜杠(\)的换行拼接操作是在注释处理之前进行的。你在注释掉多行宏的时候,只注释了宏定义的开头,却留下了行尾的\——这个反斜杠会让预处理器直接把下一行的printf语句拼接到当前注释行的后面,相当于整个printf都被包含在了注释里,变成了类似这样的内容:
// #define MYMACRO() printf("hello world\n"...
这样一来,printf自然就不会被编译执行了。
你可以用gcc -E命令生成预处理器的输出结果,直观看到处理后的代码,就能确认这一点。
给你个小建议:以后注释多行宏的时候,记得把行尾的反斜杠也一起删掉;或者用#if 0 ... #endif这种块注释的方式来临时屏蔽代码,能更稳妥地避免这类小问题。
备注:内容来源于stack exchange,提问作者Amonov Hurshed
相关产品推荐
相关产品推荐

