我家panda问我这题。然后我用32位机子测试是4.
这题目应该不够完美吧。
通过#pragma宏设置紧凑模式。这样的结果可以是3
#include
#include
#pragma pack(1)
struct s
{
unsigned a:10;
unsigned b:12;
unsigned c:2;
}x;
#pragma pack()
int main()
{
printf("%d\n",sizeof(x));
return 0;
}
filename gt
compile:gcc gt.c
run :./a.out
#include
#include
//=================#pragma pack()
struct strubase
{ unsigned char a:2;
unsigned char b:3;
unsigned char c:3;
};
struct strufur
{ unsigned char a:2;
unsigned char b:3;
unsigned char c:3;
unsigned int d:4;
};
//=================#pragma(pop)
#define tstrubase(n) base_pack##n
#define tstrufur(n) fur_fur##n
#define strubase(n) base_pack##n { unsigned char a:2;\
unsigned char b:3;\
unsigned char c:3;\
}
#define strufur(n) fur_fur##n { unsigned char a:2;\
unsigned char b:3;\
unsigned char c:3;\
unsigned int d:4;\
}
//=================#pragma pack(push,1)
#pragma pack(1)
struct strubase(1);
struct strufur(1);
#pragma pack()
//=================#pragma(pop)
//=================#pragma pack(push,2)
#pragma pack(2)
struct strubase(2);
struct strufur(2);
#pragma pack()
//=================#pragma(pop)
//=================#pragma pack(push,4)
#pragma pack(4)
struct strubase(4);
struct strufur(4);
#pragma pack()
//=================#pragma(pop)
//=================#pragma pack(push,1)
#pragma pack(8)
struct strubase(8);
struct strufur(8);
#pragma pack()
//=================#pragma(pop)
int main()
{
printf("Linux--------default---------\n");
struct strubase x0;
struct strufur m0;
printf("%d\n",sizeof(x0));
printf("%d\n",sizeof(m0));
printf("Linux--------default---------\n");
printf("Linux--------#pragma pcak(1)---------\n");
struct tstrubase(1) x;
struct tstrufur(1) m;
printf("%d\n",sizeof(x));
printf("%d\n",sizeof(m));
printf("Linux--------#pragma pcak()---------\n");
printf("Linux--------#pragma pcak(2)---------\n");
struct tstrubase(2) x2;
struct tstrufur(2) m2;
printf("%d\n",sizeof(x2));
printf("%d\n",sizeof(m2));
printf("Linux--------#pragma pcak()---------\n");
printf("Linux--------#pragma pcak(4)---------\n");
struct tstrubase(4) x4;
struct tstrufur(4) m4;
printf("%d\n",sizeof(x4));
printf("%d\n",sizeof(m4));
printf("Linux--------#pragma pcak()---------\n");
printf("Linux--------#pragma pcak(8)---------\n");
struct tstrubase(8) x8;
struct tstrufur(8) m8;
printf("%d\n",sizeof(x8));
printf("%d\n",sizeof(m8));
printf("Linux--------#pragma pcak()---------\n");
return 0;
}
screen;
Linux--------default--------- 1 4 Linux--------default--------- Linux--------#pragma pcak(1)--------- 1 2 Linux--------#pragma pcak()--------- Linux--------#pragma pcak(2)--------- 1 2 Linux--------#pragma pcak()--------- Linux--------#pragma pcak(4)--------- 1 4 Linux--------#pragma pcak()--------- Linux--------#pragma pcak(8)--------- 1 4 Linux--------#pragma pcak()---------