移植代码到linux下的匿名结构体问题
之前在做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就可以访问了