我正在尝试将文件包含在 cpp 中,但文件名应基于变量。
在我的例子中,文件名应该是
filename_X.cpp
,其中 X
的范围从 0 到 90,filename
是预定义的文本,即总共有 90 个包含语句。我想知道是否可以
创建一个包含 90 个文件的循环
包括使用变量文件名
通过互联网搜索,我对第 2) 点的处理方法如下:
#define FILENAME some_file_name
#define QUOTE(x) _QUOTE(x)
#define _QUOTE(x) #x
#define _CONCAT(x, y) x##_##y.cpp
#define CONCAT(x, y) _CONCAT(x, y)
#define _INCLUDE_FILE(x, y) (QUOTE(CONCAT(x, y)))
#define INCLUDE_FILE(x, y) _INCLUDE_FILE(x, y)
//#include INCLUDE_FILE(FILENAME, 0)
如果我调用打印函数,它工作正常
printf(INCLUDE_FILE(FILENAME, 70));
它将打印
some_file_name_70.cpp
.
但是,当我尝试在 include 语句中使用它时
#include INCLUDE_FILE(FILENAME, 0)
,错误显示为:
pred.cpp:22:10: error: expected "FILENAME" or <FILENAME>
#include INCLUDE_FILE(FILENAME, 0)
^
pred.cpp:20:28: note: expanded from macro 'INCLUDE_FILE'
#define INCLUDE_FILE(x, y) _INCLUDE_FILE(x, y)
^
pred.cpp:19:29: note: expanded from macro '_INCLUDE_FILE'
#define _INCLUDE_FILE(x, y) (QUOTE(CONCAT(x, y)))
^
1 error generated.
有谁知道为什么会发生错误?非常感谢!
这对我有用,如果我删除
_INCLUDE_FILE
宏中的括号:
#define FILENAME t
#define QUOTE(x) _QUOTE(x)
#define _QUOTE(x) #x
#define _CONCAT(x, y) x##y.h
#define CONCAT(x, y) _CONCAT(x, y)
#define _INCLUDE_FILE(x, y) QUOTE(CONCAT(x, y))
#define INCLUDE_FILE(x, y) _INCLUDE_FILE(x, y)
#include INCLUDE_FILE(FILENAME,1)
int main (){
}
始终注意宏中的括号...
请注意,您不得包含
.cpp
文件。不推荐,只包含.h
文件。除非你真的知道你在做什么奇怪的事情。