#include 指令中的宏替换

Macro substitution in #include directive

我想使用 #include 指令,其文件名作为外部定义的宏传递。

例如

#include #FILE".h"

其中 FILE 将被定义为字符串 MyFile(不带引号),结果是

#include "MyFile.h"

此处不能使用字符串化运算符 #,因为符号 FILE 不是宏参数。我尝试了其他方法,但无济于事。

您看到解决方案了吗?

字符串文字连接发生在 #include-指令解析后的两个翻译阶段;你的方法行不通。相反,请尝试按照

#define STRINGIZE_(a) #a
#define STRINGIZE(a) STRINGIZE_(a)

#define MYFILE stdio
#include STRINGIZE(MYFILE.h)

int main() {
    printf("asdf");
}

Demo.