#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.
我想使用 #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.