glib 惡夢終結者

2021-08-22 02:11:48 字數 2246 閱讀 6219

g

nome是基於gtk+開發的一套桌面環境,gnome和kde作為兩大最流行的桌面環境,在全世界廣泛使用。只要是在linux下工作的開發人員,對於gtk+一定不陌生。而對於glib,這個gtk+下的無名英雄,其功能強大卻鮮為人知。今天,在這裡簡要介紹一下,如果你是開發人員,看完本文,相信你會愛上它的。

glib不是gllibc,儘管兩者都是基於(l)gpl的開源軟體。但這一字之差卻誤之千里,glibc是gnu實現的一套標準c的庫函式,而glib是gtk+的一套函式庫。在linux平台上,像其它任何軟體一樣,glib依賴於glibc。

gobject是glib的精粹,glib是用c實現的,但在很大程式是基於物件導向思想設計的,gobject是所有類的基類。signal在其中也是一大特色,signal與作業系統中的signal並不一樣,它是類似訊息一樣的東西,讓訊息在各個物件間傳遞,但盡量降低物件間的耦合。仔細讀一下它的**,唯一想說的話就是「絕!」。

動態陣列、鍊錶、雜湊表等通用容器,在不同的公司,在不同的時期,在不同的情況下,我們每個人對每一種容器,可能都實現過n次以上。甚至在同乙個專案裡,出現幾份鍊錶的實現,也並非罕見。一直在抱怨,標準c中為什麼沒有類似於stl的標準容器,讓全世界的程式設計師在數以萬次的重複實現它們。不過,還算走運,有了glib,惡夢在此終結了。glib提供了動態陣列、單/雙向鍊錶、雜湊表、多叉樹、平衡二叉樹、字串等常用容器,完全是物件導向設計的,實現得非常精緻。不用白不用,別客氣了。

你開發過跨硬體平台的軟體嗎?是不是常常為硬體平台的差異而苦惱呢?位元組順序是常見的問題之一,大端格式,小端格式,還是pdp格式的?這樣差異造成的bug會浪費不少時間,同時讓**晦澀難讀。glib提供了一套完整的巨集,利用這些巨集編寫程式,問題大大簡化了。

你開發過跨作業系統的軟體嗎?在不同的平台下,很多函式有相同的功能,但函式原型,返回值差異巨大,也有的貌合神離,相同的名稱有著不同的意義,請看下面這張清單:

動態庫載入函式

執行緒函式

訊號量函式

互斥鎖函式

事件函式

字符集轉換函式

原子操作函式

建立程序函式

時間格式

io函式

為完成相同的功能,你卻要為此寫出不同的**。那怕只是乙個簡單的封裝,這麼多,你煩不煩?用glib吧,它的作者們都是高手中的高手,對不同的平台的理解程度,遠遠超出你和我,而且這些程式經過大量的應用程式測試,已經非常的穩定了,放心的用吧。

你寫過讀取配置檔案的模組吧,像讀取ini這樣簡單格式的檔案,當然不在話下,要讀markup語言格式的配置檔案,難度可能大了點,雖然不是不可能,但除非是為了學習,何必自己找麻煩呢。glib裡提供了詞法分析、markup語言解析、ini檔案訪問等功能,你完全不用為此擔憂。

不管是命令列程式,還是gui程式,或者後台服務程序,通過命令引數來控制程式的行為,都是開發人員慣用的手法。從命令列引數取到有用的資訊,不難,遍歷一遍不就行了嗎?但在每個程式中都來遍一次,你不覺得很單調嗎?我們的時間很寶貴,浪費時間做這種事情,不值得吧。glib的作者們早考慮到了,它提供了這樣的功能,你呼叫的它的函式,可能輕鬆的取得所要的命令列引數。

對於正規表示式,win32下的開發人員可能用得少一點,而在linux下的shell裡,它卻是不可或缺之物。有沒有想到在自己的程式中使用的它呢,在有的情況下,使用正規表示式,可能會大大降低開發的難度,提高易用性。glib也想到了這一點,它提供了簡單的正規表示式功能,當然,用與不用完全取決於你自己。

在程式裡,如果程式出錯了,特別是調了不該呼叫的函式,你是不是很想知道是誰調了它?大多數時候用debuger是最好的選擇,在某些情況下,沒有debuger可用,或者在debuger裡重現不了這個問題,你會不會覺得很無助?別怕,glib提供了一套跨平台的backtrace函式,有了它,你可以很容易找到元凶了。

產生質數的演算法不難,在我們的程式裡也像是星外來客,很少使用,常常忽略了它。所謂書到用時方恨少,有這樣的東東,說不定就有用得到它的時候。glib提供了這樣的功能,同時還提供了乙個較好的隨機數演算法。

linux shell裡的自動補完功能很好用吧,從linux轉移到win32下工作的開發人員,常常抱怨win32的shell裡沒有這個功能,其實win32下也是有的,把登錄檔裡的乙個選項開啟就行了。不管怎麼樣,總之這個功能太有用了,沒有它,你都會覺得少了點什麼,全身不自在,glib裡連這個功能都提供了,是不是很人性化呢?

記憶體問題!還是記憶體問題!如果你沒有為記憶體問題而苦惱過,我都懷疑你是不是乙個真正的c語言程式設計師。記憶體洩露、訪問越界、空指標、野指標和記憶體優化等問題,是不是都曾讓你夜不能昧?有些工具可以幫助你,但這不是萬能的良藥,好好寫你的程式才是第一要義。glib提供了一些的手段,也可以在一定程度上減輕你的痛苦。

glib 惡夢終結者

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!gnome 是基於gtk 開發的一套桌面環境,gnome 和kde 作為兩大最流行的桌面環境,在全世界廣泛使用。只要是在linux 下工作的開發人員,對於gtk 一定不陌生。而對於glib 這個gtk 下的無名英雄,其功能強大卻鮮為人知。今天,在這...

序列終結者

時間限制 1 sec 記憶體限制 128 mb 題目描述 給定乙個長度為n的序列,每個序列的元素是乙個整數。要支援以下三種操作 1.將 l,r 這個區間內的所有數加上v。2.將 l,r 這個區間翻轉,比如1 2 3 4變成4 3 2 1。3.求 l,r 這個區間中的最大值。最開始所有元素都是0。輸入...

序列終結者 Splay

1.注意在 split 和 merge 時要特判一下邊界,否則就會出現邊界錯誤的情況。2.隨時都要維護父指標。3.在更新 maxv 和翻轉標記時要判一下左右兒子是否都存在。include include includeusing namespace std const int maxn 100000...