Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1689323
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类:

2011-08-15 16:47:10

最近在项目的测试过程中,遇到了十分奇怪的事情。本来非常基本的串口操作,确总是执行不成功,或者发送接收都是乱码,后来经过仔细排查,发现原来是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;
阅读(463) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~