C:将结构大小提高到一个值的成员

问题描述 投票:0回答:1

我有一个看起来像这样的结构:

struct myStructure
{
    int index1;
    int index2;
    void *buffer;
    char fillData[];
};

我想让 fillData 成员尽可能大,以使结构成为任意大小(512 字节)。我知道我可以手工计算并写下来,但是,为了使它在未来易于扩展,我希望它在需要时自动放大或缩小。有没有办法只使用预处理器来实现这种自动行为?

c c11
1个回答
1
投票

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
可能因为填充而不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.