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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【GLib】GLib学习笔记(三):gtypes、garray、gerror、goption

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【GLib】GLib学习笔记(三):gtypes、garray、gerror、goption 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、類型:glib/gtypes.h

1.1 基本類型;
typedef char   gchar;
typedef short  gshort;
typedef long   glong;
typedef int    gint;
typedef gint   gboolean;typedef unsigned char   guchar;
typedef unsigned short  gushort;
typedef unsigned long   gulong;
typedef unsigned int    guint;typedef float   gfloat;
typedef double  gdouble;typedef void* gpointer;
typedef const void *gconstpointer; 	/指向的對象不可修改,但可以指向其它對象
1.2 最大最小值定義
#define G_MININT8	((gint8) -0x80)
#define G_MAXINT8	((gint8)  0x7f)
#define G_MAXUINT8	((guint8) 0xff)#define G_MININT16	((gint16) -0x8000)
#define G_MAXINT16	((gint16)  0x7fff)
#define G_MAXUINT16	((guint16) 0xffff)#define G_MININT32	((gint32) -0x80000000)
#define G_MAXINT32	((gint32)  0x7fffffff)
#define G_MAXUINT32	((guint32) 0xffffffff)#define G_MININT64	((gint64) G_GINT64_CONSTANT(-0x8000000000000000))
#define G_MAXINT64	G_GINT64_CONSTANT(0x7fffffffffffffff)
#define G_MAXUINT64	G_GUINT64_CONSTANT(0xffffffffffffffff)
1.3 大小端交換,位移操作
#define GUINT16_SWAP_LE_BE_CONSTANT(val)	((guint16) ( \(guint16) ((guint16) (val) >> 8) |	\(guint16) ((guint16) (val) << 8)))#define GUINT32_SWAP_LE_BE_CONSTANT(val)	((guint32) ( \(((guint32) (val) & (guint32) 0x000000ffU) << 24) | \(((guint32) (val) & (guint32) 0x0000ff00U) <<  8) | \(((guint32) (val) & (guint32) 0x00ff0000U) >>  8) | \(((guint32) (val) & (guint32) 0xff000000U) >> 24)))#define GUINT64_SWAP_LE_BE_CONSTANT(val)	((guint64) ( \(((guint64) (val) &						\(guint64) G_GINT64_CONSTANT (0x00000000000000ffU)) << 56) |	\(((guint64) (val) &						\(guint64) G_GINT64_CONSTANT (0x000000000000ff00U)) << 40) |	\(((guint64) (val) &						\(guint64) G_GINT64_CONSTANT (0x0000000000ff0000U)) << 24) |	\(((guint64) (val) &						\(guint64) G_GINT64_CONSTANT (0x00000000ff000000U)) <<  8) |	\(((guint64) (val) &						\(guint64) G_GINT64_CONSTANT (0x000000ff00000000U)) >>  8) |	\(((guint64) (val) &						\(guint64) G_GINT64_CONSTANT (0x0000ff0000000000U)) >> 24) |	\(((guint64) (val) &						\(guint64) G_GINT64_CONSTANT (0x00ff000000000000U)) >> 40) |	\(((guint64) (val) &						\(guint64) G_GINT64_CONSTANT (0xff00000000000000U)) >> 56)))

2、數組:glib/garray.h

2.1 GArray 可調整大小的數組。

原型:

typedef struct _GArray GArray;
struct _GArray{gchar *data;guint len;
};

常用接口:

新建:g_array_new
釋放:g_array_free
添加:g_array_append_vals、g_array_prepend_vals
刪除:g_array_remove_index、g_array_remove_index_fast、g_array_remove_range
插入:g_array_insert_vals
排序:g_array_sort
搜索:g_array_binary_search
2.2 GByteArray 字節數組,guint8的數組。繼承自GArray,但類型安全

原型:

typedef struct _GByteArray	GByteArray;
struct _GByteArray{guint8 *data;guint	  len;
};

常用接口:

新建:g_byte_array_new
清空:g_byte_array_free
添加:g_byte_array_append、g_byte_array_prepend
刪除:g_byte_array_remove_index、g_byte_array_remove_index_fast、g_byte_array_remove_range
排序:g_byte_array_sort
2.3 GPtrArray 可調整大小的指針數組

原型:

typedef struct _GPtrArray	GPtrArray;
struct _GPtrArray{gpointer *pdata;guint	    len;
};

常用接口:

新建:g_ptr_array_new()
釋放:g_ptr_array_free()
添加:use g_ptr_array_add()
刪除:use g_ptr_array_remove()、g_ptr_array_remove_index()、g_ptr_array_remove_index_fast()
獲取:g_ptr_array_index()
重置:g_ptr_array_set_size()
2.4 GBytes 一種簡單的參考計數數據類型,里面的數據內容不可修改

原型:

struct _GBytes{gconstpointer data;  /* may be NULL iff (size == 0) */gsize size;  /* may be 0 */gatomicrefcount ref_count;GDestroyNotify free_func;gpointer user_data;
};

一種簡單的參考計數數據類型,里面的數據內容不可修改。

使用#GBytes的目的是,只要有人持有對字節的引用,它所持有的內存區域就會一直保持活動狀態。
當最后一個引用計數被刪除時,內存被釋放。
多個不相關的調用者可以在不協調其活動的情況下使用#GBytes中的字節數據,常量指針確保在它們持有引用時字節數據不會改變或移動。

#GBytes可以來自許多不同的源,這些源可能具有不同的釋放內存區域的過程。
例如來自g_malloc()的內存、來自內存片、來自#GMappedFile的內存或來自其他分配器的內存。

#GBytes可以作為#GHashTable中的鍵。使用g_bytes_equal()和g_bytes_hash()作為g_hash_table_new()或g_hash_table_new_full()的參數。
通過將g_bytes_compare()函數傳遞給g_tree_new(), #GBytes還可以用作#GTree中的鍵。

這個字節所指向的數據不能被修改。有關可變字節數組,請參閱#GByteArray。
使用g_bytes_unref_to_array()為#GBytes序列創建可變數組。
要從可變的#GByteArray創建不可變的#GBytes,使用g_byte_array_free_to_bytes()函數。

3、錯誤:glib/gerror.h

GError
原型:

typedef struct _GError GError;
struct _GError{GQuark       domain;gint         code;gchar       *message;
};

常用接口:

新建:g_error_new
釋放:g_error_free
清理:g_clear_error
復制:g_error_copy
設置:g_set_error

4、命令行解析器:glib/goption.h

4.1 GOptionContext 選項上下文

一個“GOptionContext”結構定義了命令行選項解析器接受哪些選項。該結構只有私有字段,不應該直接訪問。
常用接口:

新建:g_option_context_new
釋放:g_option_context_free
解析:g_option_context_parse
添加group:g_option_context_add_group
新建group并添加:g_option_context_add_main_entries
4.2 GOptionGroup 代表一組選項

“GOptionGroup”結構體定義單個組中的選項。該結構只有私有字段,不應該直接訪問。
組中的所有選項共享相同的翻譯功能。
需要解析命令行選項的庫應該提供一個函數來獲取一個保存選項的“GOptionGroup”,然后應用程序可以將其添加到#GOptionContext中。
常用接口:

新建:g_option_group_new
釋放:g_option_group_free
添加條目:g_option_group_add_entries
增加引用計數:g_option_group_ref
減少引用計數:g_option_group_unref
設置鉤子函數:g_option_group_set_parse_hooks	將兩個函數與@group關聯起來,這兩個函數將從g_option_context_parse()中調用,分別在解析第一個選項之前和最后一個選項之后調用。注意,可以在使用g_option_group_new()構造組時指定要傳遞給@pre_parse_func和@post_parse_func的用戶數據。
設置錯誤處理:g_option_group_set_error_hook

4.3 GOptionEntry 代表一條選項

typedef struct _GOptionEntry   GOptionEntry;
struct _GOptionEntry
{const gchar *long_name;	// --long_namegchar        short_name;	// -short_namegint         flags;		// GOptionFlagsGOptionArg   arg;			// 參數類型gpointer     arg_data;	// 存取參數的指針const gchar *description;	// --help打印信息const gchar *arg_description;	// --help打印信息額外參數
};

常用函數:

新建group并添加選項:g_option_context_add_main_entries
向group中添加選項:g_option_group_add_entries

總結

以上是生活随笔為你收集整理的【GLib】GLib学习笔记(三):gtypes、garray、gerror、goption的全部內容,希望文章能夠幫你解決所遇到的問題。

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

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:【GLib】GLib学习笔记(三):gtypes、garra