当前位置: 技术问答>linux和unix
请问这类Linux下的C语言结构如何迁移到windows下
来源: 互联网 发布时间:2016-07-02
本文导语: 迁移对象 从Linux迁移到windows typedef struct q931_h { unsigned char raw[0]; u_int8_t pd; /* Protocol Discriminator */ #if __BYTE_ORDER == __BIG_ENDIAN u_int8_t x0:4; u_int8_t crlen:4; #else u_int8_t crlen:4; u_int8_t x0:4; #endif u_int8_t contents[0]; u_int8_t cr...
迁移对象
从Linux迁移到windows
编译器
vs2008
错误
定义错误如下
error C2229: illegal zero-sized array
error C2143:syntax error : missing ')' before '('
error C2091: function returns function
error C2059: syntax error : ')'
使用该结构时的错误如下
error C2143: syntax error : missing ')' before '*'
error C2081: 'q931_h' : name in formal parameter list illegal
error C2143: syntax error : missing '{' before '*'
error C2059: syntax error : 'type'
error C2059: syntax error : ')'
从Linux迁移到windows
typedef struct q931_h {
unsigned char raw[0];
u_int8_t pd; /* Protocol Discriminator */
#if __BYTE_ORDER == __BIG_ENDIAN
u_int8_t x0:4;
u_int8_t crlen:4;
#else
u_int8_t crlen:4;
u_int8_t x0:4;
#endif
u_int8_t contents[0];
u_int8_t crv[3];
} __attribute__ ((packed)) q931_h;
编译器
vs2008
错误
定义错误如下
error C2229: illegal zero-sized array
error C2143:syntax error : missing ')' before '('
error C2091: function returns function
error C2059: syntax error : ')'
使用该结构时的错误如下
error C2143: syntax error : missing ')' before '*'
error C2081: 'q931_h' : name in formal parameter list illegal
error C2143: syntax error : missing '{' before '*'
error C2059: syntax error : 'type'
error C2059: syntax error : ')'
|
__attribute__ ((packed)) 是GCC的扩展,其他编译器不支持吧。
这段代码看起来有点奇妙,我顺带问个问题:
0size的数组通常是个占位符,通常用在structure后面有扩展的数据的情况吧?但写在前面是什么意思呢?
这段代码看起来有点奇妙,我顺带问个问题:
0size的数组通常是个占位符,通常用在structure后面有扩展的数据的情况吧?但写在前面是什么意思呢?
|
raw的值就是pd的地址,可以用取值运算符*取值,取地址运算符&得到的仍然是pd的地址。
|
unsigned char raw[0];这个定义在LINUX下能编译通过么?
你可以看看错误提示,说的比较清楚。
你可以看看错误提示,说的比较清楚。
|
原来的代码使用了GCC的扩展特性
最好的办法是将这个结构体的接口和成员不变,然后重写一份。Windows没有大端一说,可以将大端的那部分直接
删除掉
最好的办法是将这个结构体的接口和成员不变,然后重写一份。Windows没有大端一说,可以将大端的那部分直接
删除掉