我得到了以下结构:
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