C语言中的typedef 定义结构体的问题。

#ifdef SYSTEM_USE_ARM_LINUX
#define stPACKED __attribute__((packed))
#else
#define stPACKED
#endif
typedef struct {
//成员名省略

} stPACKED MDIN_4CHVIDEO_INFO;
上面代码结构体的stPACKED 是什么作用。

替代 __attribute__((packed))
当然只在 LINUX 下有效果

所以前边有
#ifdef SYSTEM_USE_ARM_LINUX
来做为约束条件

在非LINUX 系统下 stPACKED 就是空了

这是为了提高代码的可移植性

__attribute__((packed)) 是 LINUX 下c语言扩展的语法
windows下c语言里是没有的

在LINUX下替换后是

typedef struct {
//成员名省略

} __attribute__((packed)) MDIN_4CHVIDEO_INFO;

在windows下替换后是

typedef struct {
//成员名省略

} MDIN_4CHVIDEO_INFO;
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-09
typedef其实就是为结构体类型定义了一个新的名字,别名,你可以用stPACKED去定义一个该结构体对象,例如stPACKED st;相当于int i; int 就是整型类型的类型名,stPACKED也是个类型名,它表示你定义的那个结构体类型,不是具体的变量.本回答被网友采纳
第2个回答  2012-07-09
typedef struct {
//成员名省略
} stPACKED MDIN_4CHVIDEO_INFO;
——这种写法好像有点问题:用间隔隔开的stPACKED和 MDIN_4CHVIDEO_INFO只能要一个;也可能是下面形式,这样的话是对的:
...
}stPACKED;
stPACKED MDIN_4CHVIDEO_INFO;
以上是用typedef关键字声明stPACKED是你新创建的结构体的标识符,以后就可以用它来声明新的这种结构体变量。
这了说明方便,把你的结构具体定义如下:
typedef struct {//创建一个具有1个长度为10的字符串、1个整型变量和1个单精度浮点变量的结构体.
char a[10];
int nDec;
float x;
}stPACKED;//用typedef声明stPACKED是这个结构体的标识符.
stPACKED MDIN_4CHVIDEO_INFO;//用标识符stPACKED声明一个结构体变量MDIN_4CHVIDEO_INFO
这与下面的写法是等价的:
struct ABC{//
char a[10];
int nDec;
float x;
};//
typedef ABC stPACKED
stPACKED MDIN_4CHVIDEO_INFO;
struct ABC{//
char a[10];
int nDec;
float x;
}MDIN_4CHVIDEO_INFO;

struct ABC MDIN_4CHVIDEO_INFO;
在C++中还能直接写成:
ABC MDIN_4CHVIDEO_INFO;
第3个回答  2012-07-09
ifdef条件宏,作用:宏命名,防止重复命名(即重复定义)
格式:
#ifdef 宏名(检测是否定义过名称,如果定义过则跳过)
#define 宏名
#endif
相似回答