我正在编写一个程序来为另一个用 OpenCL 语言编写的动态程序汇编代码。出于这个问题的目的,我们假设动态程序语言是 C99,但限制是所有代码都必须放在一个编译块中。
我的较大程序确定了将在 main 函数中发生的一系列步骤,以及实现这些步骤所需的 C99 源文件。然后它调用 C99 预处理器/编译器来生成动态程序可执行文件。-D SYMBOL=defn
我可以使用调用参数提供编译器宏定义。
这是一个适用于我的示例方案,并且避免了使用单独的预处理库或其他大量字符串操作工具。我将动态创建列为 mainfile.c 的字符串,其他包含的文件将实际存在。
有什么方法可以将单独的声明和定义文件合并到一个文件中?
// mainfile.c
#include "ParentDeclarationFile.txt"
#include "ChildDeclarationFile.txt"
#include "ParentDefinitionFile.txt"
#include "ChildDefinitionFile.txt"
int main()
{
return aFunctionParent( 5 );
}
// ParentDeclarationFile.txt
typedef float Type1;
int aFunctionParent( Type1 t );
// ChildDeclarationFile.txt
int aFunctionChild( Type1 t );
// ParentDefinitionFile.txt
int aFunctionParent( Type1 t ) { return aFunctionChild( t ); }
// ChildDefinitionFile.txt
int aFunctionChild( Type1 t ) { return 2*t; }
我想要一个这样的文件,我可以 #include 两次。
// SingleParentFile.txt
#ifdef DECLARATION_MODE
//declarations here
#else
// definitions here
#endif
但是#define
定义不会传递到#include'd文件中(编辑:结果是不正确的。)并且提供-D
的定义在预处理过程中不能改变。对?第一次通过后我可以置换任何类型的预处理器状态变量吗?
注意:我试图提供一个简化的示例,它要求声明和定义部分出现在不同的代码位置。我的问题的目的不是在这个简单的示例中找到解决方法。