日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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宏的區別

  • #define宏常量是在預編譯階段進行替換。枚舉常量則是在編譯的時候確定其值。
  • 一般在編譯器里,可以調試枚舉常量,但不能調試宏常量。
  • 枚舉可以一次定義大量相關常量,而#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;沒有區別

    總結

    以上是生活随笔為你收集整理的UG/Open API基础知识-语法1的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。