Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69605
  • 博文数量: 16
  • 博客积分: 334
  • 博客等级: 一等列兵
  • 技术积分: 178
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-06 11:29
文章分类

全部博文(16)

文章存档

2011年(16)

我的朋友

分类: LINUX

2011-08-14 20:37:53

最近在项目的测试过程中,遇到了十分奇怪的事情。本来非常基本的串口操作,确总是执行不成功,或者发送接收都是乱码,后来经过仔细排查,发现原来是Makefile中编译选项指定了fpack-struct选项导致的。这才赶快对这个知识点恶补一番,经过查证,总结如下:
1 linux下gcc编译选项如果指定了fpack-struct,则是将所有的结构体都按照字节方式编译,可能会带来问题,也会降低程序的效率。
2 若不指定fpack-struct选项,则自定义的很多结构体可能执行过程中会出现错乱的情况。
3 综合上述2点,结合网上其它的资料,采用定义结构体时指定__attribute__((packed))即可。
 
用法举例:
 
struct score
{
  char a;
  int  b;
}__attribute__((packed));
 
如果用了typedef,则需要注意其位置
typedef struct
{
  char a;
  int  b;
}__attribute__((packed)) score;
阅读(837) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~