我得到了以下结构:
struct s2 {
int f0;
char f1;
unsigned long long f2;
unsigned long f3;
short f4;
long f5;
};
#pragma pack (1)
struct s2_packed {
int f0;
char f1;
unsigned long long f2;
unsigned long f3;
short f4;
long f5;
};
#pragma pack ()
struct s3 {
unsigned short f0;
int f1;
unsigned int f2;
int f3;
unsigned short f4;
char f5;
};
我了解s2_packed
现在应该打包,但是s3
已经打包了吗?电话#pragma pack ()
做了什么?
更新
我刚刚检查了s3中的字节,它们确实已经打包了..不知道这里有什么想法,还有什么想法?
更新
这是我的makefile
我被给了:
all:
gcc -m32 -g -O -Wall struct.c main.c -o struct
clang:
clang -m32 -g -O -Wall struct.c main.c -o struct
strict:
gcc -m32 -g -O -Wall -Werror struct.c main.c -o struct
clang-strict:
clang -m32 -g -fsanitize=undefined -O -Wall -Werror struct.c main.c -o struct
clean:
rm -f struct
答案 0 :(得分:5)
#pragma pack ()
使用gcc
和其他一些编译器恢复实现的默认打包。
此gcc
的{{1}}的文档位于此处:
http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html