linux驱动程序 适合用位域,Linux下#pragma_##宏_位域

我家panda问我这题。然后我用32位机子测试是4.

这题目应该不够完美吧。

0818b9ca8b590ca3270a3433284dd417.png

通过#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()---------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值