头文件中定义的宏引入主文件后是否会被正常识别?
结论
头文件中定义的宏会在引入它的主文件中生效,你给出的示例代码里最终code1会被执行。
原理说明
C/C++ 程序编译前的预处理阶段,会按顺序处理所有预处理指令:#include指令的作用是将被引入头文件的全部内容,原封不动地替换到主文件中#include语句所在的位置,之后再继续处理后续的预处理逻辑。
你给出的代码在完成#include替换后,等价于如下代码:
#define header #ifdef header // code1 #else // code2 #endif
此时header宏已经被定义,#ifdef header的判断条件成立,预处理器会保留code1段的代码参与后续编译,code2段会被直接剔除,不会进入编译环节。
补充说明
只有当头文件中的宏定义被包裹在不成立的条件编译分支内,或者宏定义后紧跟着#undef取消定义的操作时,才会出现宏在主文件不生效的情况,你给出的示例不存在这类逻辑,因此宏可以正常生效。
内容的提问来源于stack exchange,提问作者Taimour Ali
相关产品推荐
相关产品推荐

