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