我正在尝试以下操作,在 win32 上使用 gcc。
#include <stdio.h>
struct st { char c; int x; } __attribute__ ((packed));
int main() {
printf("%d\n", sizeof(struct st));
return 0;
}
我预计打印的值为 5,但实际上是 8。
然而,通过以下内容,我得到 5。
#include <stdio.h>
#pragma pack(1)
struct st { char c; int x; };
int main() {
printf("%d\n", sizeof(struct st));
return 0;
}
我的程序一定有问题,但我看不出问题出在哪里。
我读过了海湾合作委员会手册以及关于此的几个问题,我仍然感到困惑。有什么提示吗?
另外,从对这些问题的回答中,我明白我不应该使用打包结构编组,我可能不会经常使用它,但我仍然想了解在这么短的程序中我看不到什么。
注意:gcc-4.9.2 和 gcc-4.8.4 都会出现该问题。
您将该属性放在错误的位置 - 尝试以下操作:
struct st { char c;
int x __attribute__ ((packed));
};
根据 gcc 手册中的示例,这将导致x
包装后立即c
.
当然,您一开始就不应该这样做,因为您的代码在某些架构上会崩溃,即使它没有崩溃,也可能会造成性能损失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)