在C中动态包含源文件

在C中动态包含源文件,c,C,我正在尝试动态地包含一个源文件。源文件名为file.c,我试图以这种方式包含它: #define dot ".c" #define file "file" #define include_file file dot #include include_file 我得到以下错误: “include指令末尾的额外标记” “致命错误:文件:没有这样的文件或目录#定义文件”文件“ 谢谢。请注意,包含.c文件是一种不好的做法。包含宏扩展的结果是一种很少被认为没有实

我正在尝试动态地包含一个源文件。源文件名为file.c,我试图以这种方式包含它:

#define dot ".c"
#define file "file"
#define include_file file dot

#include include_file
我得到以下错误: “include指令末尾的额外标记” “致命错误:文件:没有这样的文件或目录#定义文件”文件“


谢谢。

请注意,包含
.c
文件是一种不好的做法。包含宏扩展的结果是一种很少被认为没有实际用处的做法。我从未使用过一种代码库,其中要包含的文件名将由两个标记创建-通常使用单个标记作为要包含的源文件的名称如果您需要更多的预处理功能,请考虑使用其他的预处理器,如<代码> M4。强烈地考虑编写简单、易于维护和清晰易懂的代码,这些代码将很容易发现错误,扩展和为您和其他人工作,而不是编写复杂的方法来包括酸。ce文件

字符串文字串接不会在
#include
上运行。因此,不要传递字符串文字,而是在串接参数后在预处理器中调用stringify。但还有一个问题-点
不能是有效预处理器令牌的一部分,因此不能
宏##。String
,您可以使用通过扩展调用方部分的宏来解决此问题。以下操作似乎有效:

#define EXP(...)   __VA_ARGS__
#define STRING(x)   #x
#define XSTRING(x)  STRING(x)
#define dot   .c
#define file  file
#define include_file  XSTRING(EXP(file)EXP(dot))
#include include_file

你能解释一下你想用它来完成什么吗?这对我来说似乎是一个问题。C 2018中的173条注释,关于替换宏的
#include
指令说“注意相邻字符串文字不会连接成单个字符串文字(参见5.1.1.2中的翻译阶段);因此,导致两个字符串文本的扩展是无效的指令。“
谢谢。
为什么?你为什么在这里写这个?你有问题要问吗?请阅读并回答