首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gcc __packed__没有像预期的那样工作

gcc __packed__没有像预期的那样工作
EN

Stack Overflow用户
提问于 2013-09-05 21:16:07
回答 1查看 806关注 0票数 1

我经常使用这样的代码:

代码语言:javascript
运行
复制
struct teststruct
{
    uint8_t i1;
    uint16_t i2;
    uint32_t i4;
} __attribute__((__packed__));
struct teststruct *protocol = (struct teststruct *)buffer;
uint16_t var = protocol->i2;

以便通过结构访问协议数据。

该代码适用于AVR 4.6、4.7和Win32 4.6、4.7和Linux4.6,但现在(MingW) gcc 4.8的代码并不像预期的那样工作。sizeof()将返回8。

我没有找到任何提示,为什么它不再起作用。还是有其他方式来访问协议缓冲区,一种结构化的方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 12:03:30

似乎使用-mno-ms-bitfields进行编译一定会有所帮助(请参阅extended 论GCC·布奇拉)。我没有交集,但我创造了简单的复制:

代码语言:javascript
运行
复制
#include <stdint.h>
#include <stdio.h>

struct teststruct
{
    uint8_t i1;
    uint16_t i2;
    uint32_t i4;
} __attribute__((__packed__));

int main(void)
{
  fprintf(stderr, "size = %d\n", sizeof(struct teststruct));
  return 0;
}

并在linux上用-mms-bitfields编译它,所以它返回8。缺省值为7。我想,-mms-bitfields是windows目标的缺省值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18646087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档