说我有一个结构:
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
都会改变,导致事情变得混乱
答案 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
更新:刚刚看到你的评论,也许打包不是你的解决方案