使用#define在C++/C中包含另一个文件

Ahm*_*taq 17 c c++

我想定义一个包含另一个头文件的宏,如下所示:

#define MY_MACRO (text) #include "__FILE__##_inline.inl"
Run Code Online (Sandbox Code Playgroud)

因此,当预处理器解析文件person.h时,MY_MACRO(blahblah)扩展为

#include"person.h.inline.inl"

关于如何做到这一点的任何提示?

ken*_*ytm 14

#define除非您运行预处理器两次,否则无法使用构造其他预处理程序指令.

但是在你的情况下,即使运行预处理器两次也无济于事,因为它#include必须是表单的单个字符串"..."<...>.


Phi*_*ipp 10

您无法使用,__FILE__因为它已经被引用,并且#include不支持字符串连接.但您可以在以下后使用宏#include:

#define STRINGIZE_AUX(a) #a
#define STRINGIZE(a) STRINGIZE_AUX(a)
#define CAT_AUX(a, b) a##b
#define CAT(a, b) CAT_AUX(a, b)
#define MY_MACRO(file, name) STRINGIZE(CAT(file, CAT(name, _inline.inl)))
#include MY_MACRO(aaaa, qqq)
Run Code Online (Sandbox Code Playgroud)

您应该使用等效的Boost.Preprocessor宏代替CATSTRINGIZE防止全局命名空间污染.