2

我得到了以下结构:

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
4

1 回答 1

5
#pragma pack ()

withgcc和其他一些编译器恢复了实现的默认打包。

gcc这方面的文档#pragma在这里: http: //gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html

于 2013-10-14T22:22:05.717 回答