我刚开始研究大型遗留代码库。它有很多以纯文本“定义文件”命名的变量和结构。然后一些头文件将包含这些定义文件并使用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 ; }
有时这些预处理器生成的函数或数据会与函数指针交错并使其更加疯狂。