#include指令中的宏替换

时间:2015-10-27 08:07:51

标签: include c-preprocessor stringification

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

E.g。

#include #FILE".h"

其中FILE将被定义为字符串MyFile(不带引号),导致

#include "MyFile.h"

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

你看到了解决方案吗?

1 个答案:

答案 0 :(得分:13)

字符串文字连接在#include之后发生两个翻译阶段 - 指令被解析;你的方法无法奏效。相反,尝试一下

的内容
#define STRINGIZE_(a) #a
#define STRINGIZE(a) STRINGIZE_(a)

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

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

Demo