c 结构体在声明时赋值_C/C++实战015:结构体类型的定义与实现

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

8e979923cec26527130efd2affbfb03c.png

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

4b6701ddeaaf70e9a5356ba923422393.png

struct结构体类型

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

3dea1ea8dfe898fde87966e9639c15b5.png

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

1e9c5988ecc7816a36ecbe6e1a681b5a.png

typedef

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

78cd016298323e092c08e855ec5ba204.png

为什么要用typedef struct

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

5adca6dcdfd8892e7d4f62313ea617bb.png

多别名定义

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

9cbdc7f0928a5918279ebc2db2609fe9.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值