//HEAD1.H #ifndef __HEAD_1_H__ #define __HEAD_1_H__ //防止多次包含,重复定义 #include "head2.h" #define VAR_MACRO 1 //define a macro, which used in head2.h bool func(ClassA* CA); //ClassA is defined in head2.h #endif
#ifndef __HEAD_2_H__ #define __HEAD_2_H__ //防止多次包含,重复定义 #include "head1.h" class ClassA{ int mVar; void setMem(){ mVar = VAR_MACRO }; //macro VAR_MACRO is defined in head1.h }; #endif
将以上两文件分别展开有:
HEAD1.h
class ClassA{
int mVar;
void setMem(){ mVar = VAR_MACRO }; // VAR_MACRO 未定义
... //other members and functions
};
#define VAR_MACRO 1 //define a macro, which used in head2.h
bool func(ClassA* CA); //ClassA is defined in head2.h
HEAD2.h
#define VAR_MACRO 1 //define a macro, which used in head2.h
bool func(ClassA* CA); //ClassA *CA未定义
class ClassA{
int mVar;
void setMem(){ mVar = VAR_MACRO }; //macro VAR_MACRO is defined in head1.h
... //other members and functions
};
若相互包含,则有可能出现 未定义的情况。