如何在头文件中使用预处理器语句取决于包含它的 C++ 文件

How to Have Preprocessor Statements in Header File Depend on Which C++ File is Including It

如何根据包含 .h 文件的 .cpp 在我的 .h 文件中排除某些 #include 语句?

示例:

main.cpp 文件

<tell the header.h file that main.cpp is including it>
#include "header.h"

other.cpp 文件

<tell the header.h file that other.cpp is including it>
#include "header.h"

header.h 文件

<if called by main.cpp>
#include "some_file_which_fails_when_used_with_OTHER_CPP.h"
<end if>

执行此操作的典型方法是在包含 header:

之前期望源文件 #define 一个宏
// the_header.h

#ifndef MY_HEADER_H_INCLUDED
#define MY_HEADER_H_INCLUDED

#ifdef MY_PROJECT_MAIN
// ...
#else
// ...
#endif

#endif

在使用 header 的“默认”行为的文件中

// some_code.cpp

// Just use the header
#include "the_header.h"

在使用 header 激活行为的文件中:

// main.cpp

// Make sure this is BEFORE the #include
#define MY_PROJECT_MAIN
#include "the_header.h"