我怎样才能可以确定sizeof(struct ...)s?

时间:2013-04-10 06:18:03

标签: c struct sizeof maintainability

说我有一个结构:

struct myStruct
{
    int a;
    short b;
    char c;
};

在Windows中,MSDN states that int占用4个字节,short占用2个字节,char占用1个字节。总计最多7个字节。

据我所知,大多数编译器都会使用未指定的字节数填充结构以改善对齐。所以,当我执行这个程序时,

#include <stdio.h>

int main(void) {
    printf("%d\n", sizeof(struct myStruct));
    return 0;
}

我得到8的输出。这意味着填充了1个字节。

我是否可以通过任何方式维持代码中的struct大小(不是单独添加sizeof个)?

我问这个是因为后来,如果我需要更改我的结构以包含更多15个元素,如果我再添加5个结构,我的所有struct sizeof都会改变,导致事情变得混乱

2 个答案:

答案 0 :(得分:3)

您可以强制执行:

#define C_ASSERT(expr) extern char CAssertExtern[(expr)?1:-1]

C_ASSERT(sizeof(struct myStruct) == 7); // or 8, whichever you want

每当大小偏离7时,代码就会停止编译。

您可以执行类似的操作来强制执行结构成员的偏移。你需要offsetof()宏。

答案 1 :(得分:0)

你可以试试pragma pack。它有助于保持对齐并具有很多灵活性。检查一下 http://publib.boulder.ibm.com/infocenter/comphelp/v101v121/index.jsp?topic=/com.ibm.xlcpp101.aix.doc/compiler_ref/pragma_pack.html

更新:刚刚看到你的评论,也许打包不是你的解决方案