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——共用體類型指針。
如:
上面的數據類型UF_STYLER_value_u是定義的共用體數據類型,通過typedef union關鍵字把UF_STYLER_value_u數據類型定義成UF_STYLER_value_t別名,即通過UF_STYLER_value_u和UF_STYLER_value_t定義的數據類型都表示同一種類型。
UF_STYLER_value_t數據類型主要用在UF_STYLER_item_value_type_s數據類型中,作為它的成員,UF_STYLER_item_value_type_s表示定義的是結構體類型的數據,定義如下:
此外,在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-聲明結構體變量
首先介紹一下什么是定義?什么是聲明?它們有何區別?
什么是定義:所謂的定義就是(編譯器)創建一個對象,為這個對象分配一塊內存并給它取上一個名字(即我們經常說的變量名或對象名)。但注意,這個名字一旦和這塊內存匹配,它們就同生共死。一個變量或對象在一定區域(比如函數內,全局等)只能被定義一次,否則編譯器會提醒你重復定義同一個變量或對象。
什么是聲明:有兩重含義,如下:
第一重含義:告訴編譯器,這個名字已經匹配到一塊內存上了,下面的代碼用到的變量或對象是在別的地方定義的。聲明可以出現多次。
第二重含義:告訴編譯器,這個名字我先預定了,別的地方再也不能用它來作為變量名或對象名。比如你在圖書館用書占了個位子,但你本人并沒坐在這兒。這種聲明最典型的例子就是函數參數的聲明,例如
定義聲明最重要的區別:定義創建了對象并為這個對象分配了內存,聲明沒有分配內存。
struct是個神奇的關鍵字,它將一些相關聯的數據打包成一個整體,方便使用。
平時我們要求函數的參數盡量不超過4個,如果函數的參數多于4個使用起來非常容易出錯(包括每個參數的意義和順序都容易弄錯),效率也會降低(與具體CPU有關,ARM芯片對于超過4個參數的處理就很講究,具體請參考相關資料)。這個時候,可以用結構體壓縮參數個數。
在C++中struct和class關鍵字一般可以通用,只有一個很小的區別。struct的成員默認情況下屬性是public的,而class成員卻是private的。
union-聲明聯合數據類型
union關鍵字的用法與struct的用法非常類似。
union維護足夠的空間來置放多個數據成員中的“一種”,而不是為每一個數據成員配置空間,在union中所有的數據成員共有一個空間,同一時間只能儲存其中一個數據成員,所有的數據成員具有相同的起始地址。如:
一個union只配置一個足夠大的空間來容納最大長度的數據成員,如上例,最大長度是double型態,所以StateMachine的空間大小就是double數據類型的大小。
在C++中,union的成員默認屬性為public。union主要用來壓縮空間。如果一些數據不可能在同一時間同時被用到,則可以使用union。
例子:用程序確認當前系統存儲是大端模式還是小端模式,請寫一個C函數,若處理器是Big_endian,則返回0;若是Little_endian,則返回1。
注:大端模式(Big_endian):字數據的高字節存儲在低地址,而字數據的低字節則存放在高地址中。
小端模式(Little_endian):字數據的高字節存儲在高地址,而字數據的低字節則存放在低地址中。
對union型的成員的存取都是對該聯合體基地址的偏移量為0處開始,也就是聯合體的訪問不論對哪個變量的存取都是從union的首地址開始。
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宏的區別
typedef-用于給數據類型取別名(當然還有其他作用)
typedef是給一個已經存在的數據類型(注意:是類型不是變量)取一個別名,而非定義一個新的數據類型。
在實際項目中,為了方便,可能很多數據類型(尤其是結構體之類的自定義數據類型)需要我們重新取一個適用實際情況的別名。這時候typedef就可以幫助我們。如:
總結
以上是生活随笔為你收集整理的UG/Open API基础知识-语法1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV与图像处理学习六——图像形态
- 下一篇: c++将.cpp编译为.so文件