c语言和c++中struct和typedef struct的区别列举介绍
程序员文章站
2022-07-01 19:04:36
1.c语言中struct和typedef struct的区别
最近跟着雷神的博客学习ffmpeg,在看ffmpeg的的时候发现有些语句写法和自己平时见的不太一样,比如下面的语句:
struct...
1.c语言中struct和typedef struct的区别
最近跟着雷神的博客学习ffmpeg,在看ffmpeg的的时候发现有些语句写法和自己平时见的不太一样,比如下面的语句:
struct swscontext *img_convert_ctx;
明明swscontext 是一个结构体类型名称,为什么前边还要加一个struct,而且这个结构体的定义也是用typedef struct swscontext { …};明白过来ffmpeg的源码是用c写的,不是用c++,所以在用c++编译器编译ffmpeg的库头文件的时候要用extern "c"{ xxx.h ...}。
不能用c++的语法规则来读ffmpeg的源码。这里总结一下c++和c在定义结构体的过程中的不同。
1.在中定义一个结构体要用typedef struct,即
//定义1 typedef struct number { int a; int b; }; //定义2 struct number { int a; int b; }; //定义1和定义2使用时,都应该这样定义一个结构体变量 struct number num1;
但是如果写成如下格式:
//定义3 typedef struct number { int a; int b; }num; //定义3使用时,这样申请一个结构体变量 num num1;//或者 struct number num1; //定义4 typedef struct { int a; int b; }num; //使用定义4 num num1;
通过以上各个定义总结:
1.如果使用typedef来定义结构体时:型如typedef struct aaa { ..}bbb;
其中aaa是可以省略的,那么用bbb(如果有的话)来定义一个结构体变量时,可以直接用bbb xxx;就行。但用aaa来定义一个结构体变量时,则需要使用struct aaa xxx;
2.不使用typedef来定义结构体时,声明该类型变量都需要加上struct,即struct aaa xxx;
但应该注意如下定义形式:
struct { int a; int b; }onlystruct; //使用形式 onlystruct.a=10; onlystruct.b=20;
上边onlystruct结构体由于没有类型名,只能用于onlystruct这一个变量,无法再申请该类型结构体的其他变量。
2.c++struct和typedef struct的区别
如果在c++中定义一个结构体如:
//定义1 struct number { int a; int b; }; //使用定义1声明该类型结构体变量 number num;//方式1 struct number num;//方式2
上一篇: C语言学习之联合体_枚举_IO实例