UG/Open API基础知识-语法1

UG/Open API语法-数据类型

  • 数据类型
    • struct-声明结构体变量
    • union-声明联合数据类型
    • enum-声明枚举类型
      • 枚举与#define宏的区别
    • typedef-用于给数据类型取别名(当然还有其他作用)

数据类型

UG/Open API编程接口是C语言的语法格式,因而,它支持C语言的标准数据类型,除此之外,UG/Open API大量使用了 类型定义,如struct(声明结构体变量)、enum(枚举类型)、union(联合数据类型)等 UG/Open API数据结构的命名规则是:_t——数据类型;_s——结构体类型;_u_t——共用体类型;_t_p——数据类型指针;_u_p_t——共用体类型指针。
如:

union UF_STYLER_value_u
{char *string;char **strings;int integer;int *integers;double real;double *reals;UF_UI_selection_p_t selection;UF_STYLER_notification_p_t notify;UF_UI_attachment_t attach;UF_UI_option_toggle_t option_toggle;
};
typedef union UF_STYLER_value_u UF_STYLER_value_t;

上面的数据类型UF_STYLER_value_u是定义的共用体数据类型,通过typedef union关键字把UF_STYLER_value_u数据类型定义成UF_STYLER_value_t别名,即通过UF_STYLER_value_uUF_STYLER_value_t定义的数据类型都表示同一种类型。
UF_STYLER_value_t数据类型主要用在UF_STYLER_item_value_type_s数据类型中,作为它的成员,UF_STYLER_item_value_type_s表示定义的是结构体类型的数据,定义如下:

struct UF_STYLER_item_value_type_s
{int reason;const char *item_id;int subitem_index;int count;int item_atttr;int indicator;UF_STYLER_value_t value;
};

此外,在UG/Open API中,用来识别对象的数据类型是tag_t,是对象语柄,实际上,tag_t是无符号整数数据类型,在uf_defs.h中定义如下:

typedef unsigned int tag_t,*tag_p_t; 

大多数情况下,数据类型都在相应的头文件中有说明,因此,对于在程序中使用到的数据类型,也应在程序开头将相应的头文件用#include包含进来。下面是获取当前显示模型句柄tag_t,并将其关闭的代码:

tag_t tModel;
tModel = UF_PART_ask_display_part ();
UF_PART_CLOSE( tModel , 1 , 1 );

struct-声明结构体变量

首先介绍一下什么是定义?什么是声明?它们有何区别?
什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字(即我们经常说的变量名或对象名)。但注意,这个名字一旦和这块内存匹配,它们就同生共死。一个变量或对象在一定区域(比如函数内,全局等)只能被定义一次,否则编译器会提醒你重复定义同一个变量或对象。
什么是声明:有两重含义,如下:
第一重含义:告诉编译器,这个名字已经匹配到一块内存上了,下面的代码用到的变量或对象是在别的地方定义的。声明可以出现多次。
第二重含义:告诉编译器,这个名字我先预定了,别的地方再也不能用它来作为变量名或对象名。比如你在图书馆用书占了个位子,但你本人并没坐在这儿。这种声明最典型的例子就是函数参数的声明,例如

void fun (int i , char c);

定义声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存。
struct是个神奇的关键字,它将一些相关联的数据打包成一个整体,方便使用。
平时我们要求函数的参数尽量不超过4个,如果函数的参数多于4个使用起来非常容易出错(包括每个参数的意义和顺序都容易弄错),效率也会降低(与具体CPU有关,ARM芯片对于超过4个参数的处理就很讲究,具体请参考相关资料)。这个时候,可以用结构体压缩参数个数。
在C++中struct和class关键字一般可以通用,只有一个很小的区别。struct的成员默认情况下属性是public的,而class成员却是private的。

union-声明联合数据类型

union关键字的用法与struct的用法非常类似。
union维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union中所有的数据成员共有一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。如:

union StateMachine
{char character;int number;char *str;double exp;
};

一个union只配置一个足够大的空间来容纳最大长度的数据成员,如上例,最大长度是double型态,所以StateMachine的空间大小就是double数据类型的大小。
在C++中,union的成员默认属性为public。union主要用来压缩空间。如果一些数据不可能在同一时间同时被用到,则可以使用union。
例子:用程序确认当前系统存储是大端模式还是小端模式,请写一个C函数,若处理器是Big_endian,则返回0;若是Little_endian,则返回1。
注:大端模式(Big_endian):字数据的高字节存储在低地址,而字数据的低字节则存放在高地址中。
小端模式(Little_endian):字数据的高字节存储在高地址,而字数据的低字节则存放在低地址中。

对union型的成员的存取都是对该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取都是从union的首地址开始。

int checkSystem()  //检查系统存储方式为大端模式还是小端模式
{union check{int i;char ch;}c;  		//联合体c在内存中占4字节c.i = 1;    //变量i占4字节,但只有一个字节值为1,另外三个字节为0return (c.ch == 1);
}

enum-声明枚举类型

定义方法:

enum enum_type_name
{ENUM_CONST_1,ENUM_CONST_2,...ENUM_CONST_n
}enum_variable_name;

注意:enum_type_name是自定义的一种数据类型名,即enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name类型的变量enum_variable_name只能取值为花括号内的任何一个值,如果赋给该变量的值不在列表中,会报错。ENUM_CONST_1、ENUM_CONST_2、…、ENUM_CONST_n,这些成员就是我们平时所说的枚举常量(常量一般大写)。**enum变量类型还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始依次加1,如果都没有赋值,他们的值从0开始依次递增1.如分别用一个常数表示不同颜色:

enum color
{GREEN = 1,RED,BLUE,GREEN_RED = 10,GREEN_BLUE
}ColorVal;

其中各常量名代表的数值分别为:

GREEN = 1
RED = 2
BLUE = 3
GREEN_RED = 10
GREEN_BLUE = 11

枚举与#define宏的区别

  1. #define宏常量是在预编译阶段进行替换。枚举常量则是在编译的时候确定其值。
  2. 一般在编译器里,可以调试枚举常量,但不能调试宏常量。
  3. 枚举可以一次定义大量相关常量,而#define宏一次只能定义一个。

typedef-用于给数据类型取别名(当然还有其他作用)

typedef是给一个已经存在的数据类型(注意:是类型不是变量)取一个别名,而非定义一个新的数据类型。
在实际项目中,为了方便,可能很多数据类型(尤其是结构体之类的自定义数据类型)需要我们重新取一个适用实际情况的别名。这时候typedef就可以帮助我们。如:

typedef struct student
{//code
}Stu_st,*Stu_pst;
//struct student stu1;和Stu_st stu1;没有区别
//struct student *stu2;和Stu_pst stu2;和Stu_st *stu2;没有区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

目录 1, 环境2, Redis简介3, Gearman简介4, MySQL - Redis配合使用方案4, 软件安装5, MySQL UDF Trigger同步数据到Gearman6, 参考资料1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库,它的key可以是string/set/hash/list/...&…

python函数实现求非负实数平方根,在shell里调用

编写python函数实现求非负实数平方根,在shell里调用算法牛顿迭代法描述如下函数代码调用函数算法 牛顿迭代法 利用切线逼近曲线,求曲线零点,对于曲线 yf(x)y f(x)yf(x),采用迭代的方法求其零点,在点(xn,f(xn)&#…

5G风起,四大IoT迎风爆发!智能家居与电表高速增长

来源:智东西摘要:深度剖析智能家居、智能城市、车联网、网联无人机四大领域新机遇。2018年,我国物联网(IoT)连接数从2017年的15.4亿飙升至30.63亿,几近增长了100%,增速喜人。而在这组数据背后&a…

机器学习基石笔记5——为什么机器可以学习(1)

转载请注明出处:http://www.cnblogs.com/ymingjingr/p/4271742.html 目录 机器学习基石笔记1——在何时可以使用机器学习(1) 机器学习基石笔记2——在何时可以使用机器学习(2) 机器学习基石笔记3——在何时可以使用机器学习(3)(修改版) 机器学习基石笔记4——在何时…

PPT|工业互联网关键技术专利态势

来源:中国信通院CAICT摘要:《工业互联网关键技术专利态势分析(2019)》对工业互联网的三个重要体系进行深入知识产权分析。以下PPT资料是工业互联网产业联盟和中国信通院团队对《工业互联网关键技术专利态势分析(2019&a…

由二分查找算法学习算法的时间复杂度

文章目录二分查找数据算法函数代码调用函数大OOO表示法表示算法运行速度一些常见的大 OOO 运行时间启示:二分查找 二分查找是一种算法,其输入是一个有序的元素列表和要查找的元素。如果要查找的元素包含在列表中,二分查找返回其位置&#xf…

生命简史——跨越地球40亿年

来源:新原理研究所摘要:你一定也曾好奇过,地球上的生命究竟是如何起源和演化的?它又是如何从简单的原核细胞不断地演化成复杂的多细胞?如此多元化的物种是如何进化而成的?每一次变化都历经了怎样的挑战与压…

图论解决复杂路口红绿灯安排,python语言实现

文章目录问题描述说明性描述操作性描述图着色问题图着色算法算法精化和python描述算法细节处理:python实现讨论问题描述 说明性描述 说明性描述说明了需要解决的问题是什么,针对什么样的问题,期望什么样的解 这是一个5条路的交叉口&#x…

从算法到硬件,一文读懂2019年 AI如何演进

来源:图灵TOPIA翻译:黄姗,杨鹏岳在刚刚过去的2018年,人工智能领域的大事件、新发现和新进展层出不穷。BERT重磅发布,刷新了很多NLP的任务的最好性能;GAN相关研究论文持续增长,生成的照片达到了以…

apache2.2 虚拟主机配置

一、改动httpd.conf 打开appserv的安装文件夹,找到httpd.conf文件,分别去掉以下两行文字前面的#号。 #LoadModule vhost_alias_module modules/mod_vhost_alias.so去掉#意思是启用apache的虚拟主机功能。 #Include conf/extra/httpd-vhosts.conf去掉这…

Python Cookbook 3rd Edition Documentation

Python Cookbook 3rd Edition Documentation 文章目录第一章:数据结构和算法1.1 解压序列赋值给多个变量问题解决方案讨论1.2 解压可迭代对象赋值给多个变量问题解决方案讨论第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表…

《阿丽塔》脑机接口正从科幻走向现实

来源:zhongcap摘要:《流浪地球》和《阿丽塔》前后脚上映,难免不让人比较一番。科幻片的魅力,在于它试验和想象未来的可能性。昨天晚上小编去看了卡梅隆的新作《阿丽塔:战斗天使》。《流浪地球》和《阿丽塔》前后脚上映…

2015年2月12日——不懂点

CNBLOG项目不懂知识点:1. local:[...]的写法 这样声明可使用。 1    xmlns:local"using:CNBlogs" 2 xmlns:ControlHelper"using:CNBlogs.ControlHelper" 2. 书写格式上 - 把所有的繁杂的 style template 等等都放到了具体类似于 .css …

全球首个AI女主播上岗了!太惊艳了!

来源:水木然摘要:前不久,全球首个AI女主播诞生的消息走红网络!刚刚,这位AI女主播今天正式上岗了!是不是非常惊艳?如果不是专门解释,她极有可能被为是真人!这位全球首个AI…

有原创保护能力的公众帐号可申请页面模版功能和图文消息正文插入历史群发链接...

之前微信公众平台仅针对开通了微信支付的公众号支持插入图文消息链接,现在微信团队对有原创保护能力的公众帐号开放页面模版功能、开放图文消息正文插入历史图文链接。(怎样申请成为有原创保护能力的公众帐号?也许有人会把页面模版和模板消息…

重磅!华为宣布起诉美国政府

来源:网易智能摘要:今天,华为在深圳总部召开发布会,宣布决定起诉美国政府。01指责美国政府窃取华为服务器华为宣布针对美国《2019财年国防授权法》第889条的合宪性向美国联邦法院提起诉讼,请求法院判定这一针对华为的销…

递归和快速排序

文章目录递归问题描述基线条件和递归条件栈调用栈递归调用栈小结快速排序示例1问题描述欧几里得算法使用D&C解决问题的两个步骤:示例2快速排序工作原理代码小结递归 问题描述 假设你在祖母的阁楼中翻箱倒柜,发现了一个上锁的神秘手提箱。祖母告诉你…

Spire.Pdf 的各种操作总结

Spire.Pdf 的各种操作总结简介 试验新产品总是给我带来许多挑战,当然这也是一个引进创新技术的好方法。在这里我要跟大家分享的是使用Spire.Pdf的过程,它是来自E-iceblue公司的轻便PDF程序库。 设计情节我以前经常没事就搞搞PDF。Spire.Pdf是用C# 写的PD…

从观望到行动:全球工业物联网市场生态全景观察

来源:资本实验室在当前,诸如5G,物联网、边缘计算、人工智能、机器人、区块链、增材制造和虚拟现实/增强现实等技术正在加速融合到工业物联网(Industrial Internet of Things,IIoT)的肥沃土壤中,…

OC语言知识6

本文目录 一、异步POST请求二、NSURLConnection的其他请求方法上一讲介绍了iOS中的异步GET请求,这讲来看看异步POST请求。 回到顶部一、异步POST请求 假如请求路径是http://192.168.1.102:8080/MJServer/login,请求参数有2个: username &…