码迷,mamicode.com
首页 > 系统相关 > 详细

移植代码到linux下的匿名结构体问题

时间:2015-01-22 13:00:42      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

之前在做windows服务器迁移到linux的过程中,出现了一个编译类的问题

代码中定义了如下结构体

struct MsgInfo
{
    union 
    {
      struct
      {
        OBJID idType;
        UINT  unExp;
      };
      struct
      {
        OBJID idType;
        UCHAR ucResult;
      };
    }
}

 

在windows下面安全编译通过,在LINUX的GCC下无法编译通过。

这是因为代码中使用到了匿名结构体,匿名结构体在Windows下可以直接访问,且代码中大量使用了诸如m_pInfo->idType,

而GCC下则认为,这种没有名称的结构体会造成混淆。

关于这个问题,可以看这个讨论串

http://stackoverflow.com/questions/1972003/how-to-compile-c-code-with-anonymous-structs-unions

可以看到是如果说加上一些编译参数是可以保证编译通过的,

而且新的c11和c++11都是允许这种写法的

而我这里为了移植,暂时还是用旧方案,因为gcc版本偏低,给每个结构体加上名字

struct MsgInfo
{
    union 
    {
      struct
      {
        OBJID idType;
        UINT  unExp;
      }expInfo;
      struct
      {
        OBJID idType;
        UCHAR ucResult;
      }learnInfo;
    }
}

这样就行了。

 之后使用m_pInfo->learnInfo.idType就可以访问了

移植代码到linux下的匿名结构体问题

标签:

原文地址:http://www.cnblogs.com/flamefox/p/4241176.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!