互联网 > 正文
人工智能网热度:

C/C++实战015:结构体类型的定义与实现

在进行FANUC开发的时候我们可以看到Focas中的函数返回的数据大部分都是FANUC自定义的数据类型,比如方法cnc_rdnodeinfo()中返回的是ODBNODE结构数据,其中定义了多种类型的数据。当用户调用该方法时即可通过ODBNODE实体中获取对应类型的数据。

? 那么Focas在哪里定义了这些数据结构体呢,在开发文档中有个Fwlib32.h头文件,Focas将这些数据结构体集中定义在Fwlib32.h中,再加上对功能函数、数据接口的声明 ,所以我们在开发FANUC项目时都必须引入Fwlib32.h文件和Fwlib32.lib文件。

struct结构体类型

在C++中定义一个结构体还是很简单的,通过struct就来定义结构体类型。当我们需要使用到Dome时可以直接通过Dome来声明变量,比如Dome dome;,通过dome.a即可对该变量进行赋值或提取了。

我们也可以为其申明定义结构体变量如Test,这种形式当我们定义了Dome结构体类型时便直接完成了初始化操作,使用时可以直接通过Test.a对该变量进行赋值或提取。这种方式虽然使用起来比较方便,但由于创建时就初始化变量了,因此会一直占用空间的。

typedef

typedef为C语言中的关键字,为数据类型定义一个新名字(也叫别名,原名依旧有效)。可以是基本类型名称、数组类型名称、指针类型名称、枚举型名称以及自定义的struct结构体等数据类型名称,但是不能与auto、extern、static、register等关键字出现在同一个表达式中。当我们为结构体定义了typedef属性时,我们就可以通过该别名来定义结构体中的变量。

为什么要用typedef struct

前面我们看到C++中定义struct时很简单,只需在调用时初始化该变量即可。但是在C中调用有时需要通过struct 结构名 对象名来申明结构体对象,使用起来不够便捷。为了兼容C调用我们可以统一通过typedef来定义结构体,这样不管是C或C++都可以通过别名来调用。

多别名定义

在申明别名时我们可以为结构体同时定义多个别名,调用时用任何一个别名都可以使用,这个逻辑相当于对前一个别名再进行别名定义。通过typedef与结构体配合可以简化复杂类型的定义,使结构体的表达更加简洁,更具兼容性。

更多C/C++实战技巧可参考专栏:C/C++实战系列

欢迎关注微信公众号:dcwlcm666;合作及投稿请联系:1519329887@qq.com

赞助商