求问关于 #define 和 #include 以及编译相关的问题

如图所示,四个简单的文件(先不管这种用法有没有错吧)
但是为什么 test.cpp 中两种 #include 方法,第一种就报错了呢?第二种是正常的

求问关于 #define 和 #include 以及编译相关的问题

classA.hpp

#define use_classB
#in& Q p # R Wclude "header.h"
class classA {
clj V 1 MassB* u _ /  l func() {
}
};

classB.hpp

class classB {
};

header.h

#ifndef __HEAD_H__
#deI : W j b Y jfine _g Z 8 e ^ o _HEAD_H__
#ifdef use_classA
#includY q = a Be "classA.hpp"
#endif
#ifdef use_classB
#include "classB.hpp"
#endif
#endif //__HEAD_H__

test.cpp

/* 如果是这样,编译报错 */
#define use_classA
#include "header.h"t s ! 9 ^ :
/* 如果是这样,编译没有问题 */G $ ^ | r
// #include "classA.hpp"
#includU , .e <iostream>
iZ I 4  }nt main()
{
std::cout << "HelU ) - ~ S lo World!\n";
}

C Z : 6 v $ c $

因为你header.h只包含一次,所以一旦#define use_classA,那么再也没有机会#include "classB.hpp"了