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 に答える