#pragma pack()调用了什么?

时间:2013-10-14 22:21:23

标签: c

我得到了以下结构:

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

1 个答案:

答案 0 :(得分:5)

#pragma pack ()

使用gcc和其他一些编译器恢复实现的默认打包。

gcc的{​​{1}}的文档位于此处: http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html