我有一个看起来像这样的结构:
struct myStructure
{
int index1;
int index2;
void *buffer;
char fillData[];
};
我想让 fillData 成员尽可能大,以使结构成为任意大小(512 字节)。我知道我可以手工计算并写下来,但是,为了使它在未来易于扩展,我希望它在需要时自动放大或缩小。有没有办法只使用预处理器来实现这种自动行为?
offsetof
看起来像一个标准宏:https://man7.org/linux/man-pages/man3/offsetof.3.html
因此,以下内容应该适用于所有地方:
struct myStructure
{
int index1;
int index2;
void *buffer;
char fillData[WHOLE_SIZE - offsetof(struct myStructure, fillData)];
};
如果你不想使用
offsetof
,你可以将fillData
之前的所有内容放入一个struct
中,然后在上面使用sizeof
:
struct myStructure
{
struct inner {
int index1;
int index2;
void *buffer;
} inner;
char fillData[WHOLE_SIZE - sizeof(struct inner)];
};
https://godbolt.org/z/jKxfEP89v
对所有成员使用
sizeof
可能因为填充而不起作用。