天天看點

glib學習筆記

1 glibc 是gnu釋出的libc庫,也即c運作庫。

2 glib是gtk+的一套函數庫,gobject是glib的精粹,glib是用C實作的.glib提供了動态數組、單/雙向連結清單、哈希表、多叉樹、平衡二叉樹、字元串等常用容器,完全是面向對象設計的,實作得非常精緻。不用白不用,别客氣了。

3 類型定義:

整數類型:gint8,guint8,gint16,guint16,gint32,guint32,gint64,guint64

整數類型:gshort,glong,gint和short,long,int等價

布爾類型:gboolean:TRUE FALSE

字元型:gfloat,gdouble與float、double等價

指針:gpointer相當于标準C的void *

     gconstpointer相當于const void *

4 glib宏

TRUE 1

FALSE 0

NULL ((void*)0)

MIN() MAX()傳回最大或最小的數

ABS()傳回絕對值

CLAMP(x,low,high)若x在[low,high]傳回内,則等于x,如果x小于low,則傳回low;如果x大于high,則傳回high

gint my_int;

gpointer my_pointer;

my_int = 5;

my_pointer = GINT_TO_POINTER(my_int);

printf("We are storing %d\n", GPOINTER_TO_INT(my_pointer));

5 宏調試

前提條件檢查:

  #include <glib.h>

  g_return_if_fail(condition)

  g_return_val_if_fail(condition, retval)

  這個宏清單列出了 g l i b的預條件檢查宏。對g_return_if_fail,如果條件為假,則列印一個警告資訊并且從目前函數立刻傳回。g_return_val_if_fail與前一個宏類似,但是允許傳回一個值。毫無疑問,這些宏很有用 — 如果大量使用它們,特别是結合 G t k +的實時類型檢查,會節省大量的查找指針和類型錯誤的時間。

斷言:

#include <glib.h>

g_assert(condition)

g_assert_not_reached()

 如果斷言失敗,将傳回一條資訊,通常應該在包含斷言的子產品中查找錯誤;如果 g_return_if_fail()檢查失敗,通常要在調用這個子產品的代碼中查找錯誤。這也是斷言與前提條件檢查的差別。

6 記憶體管理

a g_malloc()總是傳回gpointer,而不是char*,是以不必轉換傳回值。

b 如果低層的 malloc()失敗,g_malloc()将退出程式,是以不必檢查傳回值是否是 NULL。

c g_malloc() 對于配置設定0位元組傳回NULL。

d g_free()忽略任何傳遞給它的 NULL指針。

7 字元串操作

#include <glib.h>

gint g_snprintf(gchar* buf,

              gulong n,

              const gchar* format,

              ...)

gint g_strcasecmp(const gchar* s1,

              const gchar* s2)

gint g_strncasecmp(const gchar* s1,

              const gchar* s2,

              guint n)

g_strdup(),g_strndup()傳回一個已配置設定記憶體的字元串或字元串前 n個字元的拷貝。

8 資料結構

a 連結清單 GSList GList

GSList* list = NULL;

gchar* element = g_strdup("a string");

list = g_slist_append(list, element);

為了周遊整個連結清單,可以如下操作:

GSList* tmp = list;

while (tmp != NULL)

  {

    printf("List data: %p\n", tmp->data);

    tmp = g_slist_next(tmp);

  }

  這意味着用 g _ s l i s t _ a p p e n d ( )構造一個連結清單是一個很糟糕的主意。當需要一個特殊順序的

清單項時,可以先調用 g_slist_prepend()前插資料,然後調用 g_slist_reverse()将連結清單颠倒過來。

b 樹

GTree是基本的平衡二叉樹,它将存儲按鍵值排序成對鍵值; GNode存儲任意的樹結構資料,比如分析樹或分類樹。

函數清單: 建立和銷毀平衡二叉樹

#include <glib.h>

GTree* g_tree_new(GCompareFunc key_compare_func)

void g_tree_destroy(GTree* tree)

9 GString

 除了使用 gchar *進行字元串處理以外, G l i b還定義了一種新的資料類型: G S t r i n g。它類似于标準 C的字元串類型,但是 GString能夠自動增長。它的字元串資料是以 NULL結尾的。

10 計時器函數

使用它的第一步是用g _ t i m e r _ n e w ( )函數建立一個計時器,然後使用 g _ t i m e r _ s t a r t ( )函數開始對操作計時,使用g_timer_stop()函數停止對操作計時,用 g_timer_elapsed()函數判定計時器的運作時間。

轉自于:www.cnblogs.com/wangtianxj/archive/2009/07/01/1514531.html

繼續閱讀