包含文件中的变量 c++

问题描述 投票:0回答:1

我正在尝试将文件包含在 cpp 中,但文件名应基于变量。

在我的例子中,文件名应该是

filename_X.cpp
,其中
X
的范围从 0 到 90,
filename
是预定义的文本,即总共有 90 个包含语句。我想知道是否可以

  1. 创建一个包含 90 个文件的循环

  2. 包括使用变量文件名

通过互联网搜索,我对第 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.

有谁知道为什么会发生错误?非常感谢!

c++ macros include c-preprocessor
1个回答
3
投票

这对我有用,如果我删除

_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
文件。除非你真的知道你在做什么奇怪的事情。

© www.soinside.com 2019 - 2024. All rights reserved.