答案 0 :(得分:362)
答案 1 :(得分:22)
答案 2 :(得分:15)
答案 3 :(得分:7)
答案 4 :(得分:2)
答案 5 :(得分:2)
答案 6 :(得分:1)
答案 7 :(得分:1)
答案 8 :(得分:1)
答案 9 :(得分:0)
请注意,还有其他方法可以实现#pragma pack提供的数据一致性(例如,有些人将#pragma pack(1)用于应该通过网络发送的结构)。例如,请参阅以下代码及其后续输出:
#include <stdio.h>
struct a {
char one;
char two[2];
char eight[8];
char four[4];
};
struct b {
char one;
short two;
long int eight;
int four;
};
int main(int argc, char** argv) {
struct a twoa[2] = {};
struct b twob[2] = {};
printf("sizeof(struct a): %i, sizeof(struct b): %i\n", sizeof(struct a), sizeof(struct b));
printf("sizeof(twoa): %i, sizeof(twob): %i\n", sizeof(twoa), sizeof(twob));
}
输出如下: sizeof(struct a):15,sizeof(struct b):24 sizeof(twoa):30,sizeof(twob):48
注意struct a的大小与字节数的大小完全相同,但struct b添加了填充(有关填充的详细信息,请参阅this)。通过执行此操作而不是#pragma pack,您可以控制将“有线格式”转换为适当的类型。例如,“char two [2]”变为“short int”等等。
答案 10 :(得分:0)
为什么要使用它?
减少结构的内存
为什么不应该使用它?