【发布时间】:2012-08-10 06:31:37
【问题描述】:
我刚刚开始处理大型遗留代码库。它有很多以纯文本“定义文件”命名的变量和结构。然后一些头文件会包含这些定义文件,并使用C预处理器生成变量声明和getter/setter。
这会给工作和修改字段带来巨大的痛苦。此外,getter/setter 的签名直到编译时才会生成,因此也不支持智能感知。
我正在考虑在编译之前生成代码,并要求其他模块包含生成的头文件,而不是包含基于预处理器的头文件。我研究了 Python + clang 并将关键字添加到 C 语言中。但是他们两个都压倒性的,我不知道如何开始。所以我想问一下人们会建议如何解决这个问题。
编辑: 代码库不属于我,所以我无法复制和粘贴。 但我可以模仿代码,它看起来像:
// in the definition file
NEWVARIABLE( point, int )
// in the preprocessor header file
#define NEWVARIABLE( name, type ) \
static type name;\
type LIBNAME_Get##name##(){return name ; }\
void LIBNAME_Set##name##( type _##name ){ name = _##name ; }
有时这些预处理器生成的函数或数据会与函数指针交错,使其更加疯狂。
【问题讨论】:
-
该代码使用 C 预处理器来预处理不是有效 C 代码的文件,以生成实际声明?显然,最初的设计师认为这是一个很大的优势。你错过了什么吗? (例如,只是修改非 C 文件来进行字段更改?)
标签: c clang code-generation c-preprocessor