我有2个标题需要定义2个相似的结构。一个结构应该与32字节对齐,而其他结构类似但不需要对齐到32字节,所以我可以在这里节省一些内存。一个包含在另一个中。这是main_header.h
struct mainStruct
{
int a;
int b;
int c;
char pad[20];
};
以下是sub_header.h
#include "main_header.h"
struct subStruct
{
int a;
int b;
int c;
};
现在我要做的是定义subStruct
,每当我更改mainStruct
而不是pad[20]
时,所有其他字段都应在subStruct
中更新。也就是说,如果明天,我就这样mainStruct
:
struct mainStruct
{
int a;
int b;
int c;
int d;
char pad[16];
};
然后,自动将其反映在sub_header.h
struct subStruct
{
int a;
int b;
int c;
int d;
};
是否有使用某种宏或其他预处理程序指令的有效方法?
subStruct应始终从mainStruct派生而不是其他方式,这非常重要。
提前致谢。
答案 0 :(得分:3)
你是否考虑过另一种方式;包括subStruct
作为mainStruct
中的元素?像这样:
struct sub {
int a, b, c;
};
struct main {
struct sub head;
char dummy[16];
};
是的,确实需要一层额外的语法才能获得a
,b
或c
,但内存布局和性能应该相同。
否则,没有什么能阻止你使用宏,正如你自己建议的那样:
#define SUB_FIELDS int a; int b; int c;
struct main {
SUB_FIELDS
char dummy[16];
};
struct sub {
SUB_FIELDS
};
答案 1 :(得分:0)
嗯,这就是C ++最初发明的原因。但是如果你希望继续使用普通的C(可能有这样的决定的原因)你可以检查GLib / GObject类型系统实现为一组宏超过普通C。