C 预处理器 - 在编译时向结构添加元素
C Preprocessor - Add Elements to Struct at Compile Time
我正在想办法在编译时将元素添加到结构中,但要在另一个文件中定义它。例如:
defA.h:
typedef struct A {
int element1;
int element2;
} A;
otherfile.c:
#include "defA.h"
typedef struct B {
int element1;
} B;
ADD_ELEMENT_TO(A, B, element3)
会导致:
struct A {
int element1;
int element2;
B element3;
};
任何人都可以想出一种方法来实现这个或类似的东西吗?我希望能够通过选择编译 otherfile.c
或不编译其余构建来控制它。
任何使用 C 预处理器功能的解决方案都会在声明结构的地方造成混乱。例如:
主要source/header:
#include "SpecialSauce.h"
…
typedef struct A {
int element1;
int element2;
SpecialStuff
} A;
如果客户刚购买基础软件,SpecialSauce.h包含:
#define SpecialStuff
如果客户支付额外费用,SpecialSauce.h包含:
#define SpecialStuff int element3;
当然,根据当前软件的版本,需要使用或不使用 element3
的代码。
所有这些都可以通过预处理器指令来控制,并且通常可以通过给予适当的照顾来保持它不会太乱。但商业压力通常会阻止这一点,并导致软件变得越来越混乱,维护也被忽视。所以这些杂乱无章的东西会变得丑陋而且代价高昂。
另一种选择是保留主源文件并使用它们生成具有选定选项的源文件。只有生成的源文件会提供给客户,他们不会有丑陋的预处理器条件。然而,这就需要软件来处理主源文件,主源文件本身必须维护,并且主源文件仍然必须有某种条件,你可以保持良好状态,因为它们在你的控制之下,但是,再一次,现实世界的软件有变得混乱的趋势。
我正在想办法在编译时将元素添加到结构中,但要在另一个文件中定义它。例如:
defA.h:
typedef struct A {
int element1;
int element2;
} A;
otherfile.c:
#include "defA.h"
typedef struct B {
int element1;
} B;
ADD_ELEMENT_TO(A, B, element3)
会导致:
struct A {
int element1;
int element2;
B element3;
};
任何人都可以想出一种方法来实现这个或类似的东西吗?我希望能够通过选择编译 otherfile.c
或不编译其余构建来控制它。
任何使用 C 预处理器功能的解决方案都会在声明结构的地方造成混乱。例如:
主要source/header:
#include "SpecialSauce.h"
…
typedef struct A {
int element1;
int element2;
SpecialStuff
} A;
如果客户刚购买基础软件,SpecialSauce.h包含:
#define SpecialStuff
如果客户支付额外费用,SpecialSauce.h包含:
#define SpecialStuff int element3;
当然,根据当前软件的版本,需要使用或不使用 element3
的代码。
所有这些都可以通过预处理器指令来控制,并且通常可以通过给予适当的照顾来保持它不会太乱。但商业压力通常会阻止这一点,并导致软件变得越来越混乱,维护也被忽视。所以这些杂乱无章的东西会变得丑陋而且代价高昂。
另一种选择是保留主源文件并使用它们生成具有选定选项的源文件。只有生成的源文件会提供给客户,他们不会有丑陋的预处理器条件。然而,这就需要软件来处理主源文件,主源文件本身必须维护,并且主源文件仍然必须有某种条件,你可以保持良好状态,因为它们在你的控制之下,但是,再一次,现实世界的软件有变得混乱的趋势。