C语言中的typedef 定义结构体的问题。
#ifdefSYSTEM_USE_ARM_LINUX#definestPACKED__attribute__((packed))#else#definestPACKED#...
#ifdef SYSTEM_USE_ARM_LINUX
#define stPACKED __attribute__((packed))
#else
#define stPACKED
#endif
typedef struct {
//成员名省略
} stPACKED MDIN_4CHVIDEO_INFO;
上面代码结构体的stPACKED 是什么作用。 展开
#define stPACKED __attribute__((packed))
#else
#define stPACKED
#endif
typedef struct {
//成员名省略
} stPACKED MDIN_4CHVIDEO_INFO;
上面代码结构体的stPACKED 是什么作用。 展开
4个回答
推荐于2016-10-24
展开全部
替代 __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;
当然只在 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;
展开全部
typedef其实就是为结构体类型定义了一个新的名字,别名,你可以用stPACKED去定义一个该结构体对象,例如stPACKED st;相当于int i; int 就是整型类型的类型名,stPACKED也是个类型名,它表示你定义的那个结构体类型,不是具体的变量.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
//成员名省略
} 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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ifdef条件宏,作用:宏命名,防止重复命名(即重复定义)
格式:
#ifdef 宏名(检测是否定义过名称,如果定义过则跳过)
#define 宏名
#endif
格式:
#ifdef 宏名(检测是否定义过名称,如果定义过则跳过)
#define 宏名
#endif
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询