Glib學習筆記(1)
GLib學習筆記
一 Glib筆記1
以前主要是做C++,最近有個機會轉到嵌入式的C,大部分用的是Glib/Gobject系統,前一週的樣子把相關內容大致瀏覽了一遍,主要以reference Menu為主。我看英文書的一個習慣是看一章,總結一章,這樣學得快,記得牢。以前整理過很多書籍,不過都是本地的doc文件。在學Glib過程中,從網上學到很多知識,所以我也放到部落格上吧。僅供自己總結,風格比較隨意。
這一部分主要是Glib的基礎
1.1 版本資訊
注意,自己的程式裡邊都要包含<glib.h>
下面這些巨集:用於版本資訊,主要用於configure時候的版本檢測,一般應用程式不太用這個
[這一小節沒什麼東西]
1.2 基本資料型別
Glib提供了一套可移植的原始資料型別,例如gint等,知道這個就行了,以後寫Glib的程式,儘量用它定義的資料型別
有幾個值得注意:
lgboolean:返回TRUE或FALSE
l代表返回void*指標的--gpointer,以及一個const void* gconstpointer
l返回可表示範圍的,例如G_MINSHORT,G_MAXSHORT等
l提供給print和scan函式的巨集,如G_GINT16_MODIFIER/G_GINT16_FORMAT等
l64位整數,有兩個紅,G_GINT64_CONSTANT,G_GUINT64_CONSTANT
lsizeof(struct)返回gsize型別,goffsset=gint64
[沒什麼難度這一節]
1.3 基本資料型別的表示範圍
上一節也提到過,例如G_MAXINT,G_MININT等
1.4 標準巨集
#defineG_STRUCT_MEMBER(member_type, struct_p, struct_offset)
member_type:成員型別
strutc_p:指向該結構的指標
struct_offset:偏移
估計裡邊的實現是 (member_type*)((gchar*)struct_p + struct_offset)
類似的還有:
#defineG_STRUCT_MEMBER_P(struct_p, struct_offset)
沒有前面的強制型別轉換了
#defineG_STRUCT_OFFSET(struct_type, member)
返回member在結構中的偏移位元組。具體怎麼實現有點忘記了,但是核心程式碼中常見這樣的內容。
1.5 型別轉換巨集
#defineGINT_TO_POINTER(i)
#defineGPOINTER_TO_INT(p)
#defineGUINT_TO_POINTER(u)
#defineGPOINTER_TO_UINT(p)
#defineGSIZE_TO_POINTER(s)
#defineGPOINTER_TO_SIZE(p)
目的其實很簡單,就是在指標型別中儲存整數型別。我們倒是經常在Windows下用DWORD儲存指標型別的資料。
1.6 位元組序巨集
轉換位元組序的一些輔助巨集和函式,例如g_htons,g_ntohs等。
l本機是怎樣的位元組序?檢視巨集定義G_BYTE_ORDER
沒什麼意思
1.7 數值定義
定義一些數值常量。
G_PI,定義Pi常量。
沒什麼意思
1.8 其他雜項
l定義一個多行的巨集,G_STMT_START和G_STMT_END,其實就是do/while{0}的組合
lG_BEGIN_DECLS,G_END_DECLS,標頭檔案中用的開頭和結尾
有些有用,到時候再查就知道了。
1.9 原子操作函式
很多啊
gintg_atomic_int_get();
voidg_atomic_int_set();
voidg_atomic_int_add();
gintg_atomic_int_exchange_and_add();
gbooleang_atomic_int_compare_and_exchange();
gpointerg_atomic_pointer_get();
voidg_atomic_pointer_set();
gbooleang_atomic_pointer_compare_and_exchange
();
voidg_atomic_int_inc(gint *atomic);
gbooleang_atomic_int_dec_and_test(gint *atomic);
manual做的也真是不到位,竟然連引數都沒有寫進來。
看這些東西,最好裝一個source insight。直接看原始碼。
相關推薦
Glib學習筆記(1)
GLib學習筆記 一 Glib筆記1 以前主要是做C++,最近有個機會轉到嵌入式的C,大部分用的是Glib/Gobject系統,前一週的樣子把相關內容大致瀏覽了一遍,主要以reference Menu為
glib 學習筆記1,讀取程式配置檔案
1 [General] 2 3 # List of plugins that should not be loaded on bluetoothd startup 4 #DisablePlugins = network,input 5 6 # Default adaper name 7 #
avalonjs 學習筆記1---checkbox
nod item ack lex server ini npm 學習 define 一、vscode 安裝使用 1.vs code+node.js下載安裝 2.在node.js command prompt 中運行 npm install -g live-server 3
微信小程序學習筆記1
接口 spa class 搭建 name demo title 更新數據 navigate 初步接觸微信小程序開發 微信小程序的開發環境 微信小程序是運行在微信環境中的應用,它只能在微信中運行,不能運行在瀏覽器等其他環境中,微信團隊提供了專門開發工具用於小程
mysql學習筆記(1-安裝簡介)
配置文件 服務器 二進制 mysql 通用 mysql的安裝方式:(1)通過系統提供的默認版本(穩定版,該版本滿足了使用的需求,建議使用,os vendor)(2)mysql官方提供 官方提供的通用rpm安裝包 官方提供的文件,以文件覆蓋的方式安裝 源碼包編譯安裝
Python學習筆記1
bsp 面向對象 解釋型 基本 ges mon xxx str text 一、什麽是Python Python是面向對象、解釋型的計算機語言;語法簡潔、優雅、易學。 在1989誕生,Guido(龜叔)開發。龜叔非常喜歡一部叫做《Monty Python飛行馬戲團》的
java 學習筆記1
跨平臺原理 所有 com 路徑 運行機制 main 單位 width rtu 、 高級語言運行機制 高級語言按程序的執行方式分為編譯型和解釋型兩種。 java語言比較特殊,Java程序的執行必須經過先編譯後解釋的步驟。 1 編譯生成字節碼,只面向JVM(.class) 2J
Java Web學習筆記-1
根路徑 text .get set 接口 context cat 方法 web應用 1.servlet理論上可以處理多種形式的請求響應形式 ,http只是其中之一 ,所以HttpServletRequest、 HttpServletResponse分別是ServletReq
Redis學習筆記1--入門篇
ase list ica cati ctu apple string replace first 一、Redis簡介: Redis(http://redis.io)是一款開源的、高性能的鍵-值存儲(key-value store),它是用ANSI C來編寫。Redis的項目
Python學習筆記1安裝概述_20170610
lin 教程 linu 學習筆記 python學習 版本 pyc module 選擇 python 的安裝概述: 安裝Python3.6,教程很多 需要安裝的module:(註意選擇版本) numpy scipy matplotlib 以上,在Windows
深入理解 Java 虛擬機之學習筆記(1)
over 信息 hotspot 體系 ima 模塊化 介紹 style 創建 本書結構: 從宏觀的角度介紹了整個Java技術體系、Java和JVM的發展歷程、模塊化,以及JDK的編譯 講解了JVM的自動內存管理,包括虛擬機內存區域的劃分原理以及各種內存溢出異常產
MySql 基礎學習筆記 1——概述與基本數據類型: 整型: 1)TINYINT 2)SMALLINT 3) MEDIUMINT 4)INT 5)BIGINT 主要是大小的差別 圖 浮點型:命令
where float 函數名 src ron 編碼方式 永遠 -m mas 一、CMD中經常使用mysql相關命令 mysql -D, --database=name //打開數據庫 --delimiter=name //指定分隔符 -h, --host=na
機器學習筆記 1 LMS和梯度下降(批梯度下降) 20170617
temp eas 理解 import 樣本 alt mes show 超過 # 概念 LMS(least mean square):(最小均方法)通過最小化均方誤差來求最佳參數的方法。 GD(gradient descent) : (梯度下降法)一種參數更新法則。可以作為L
lua學習筆記1 環境配置
http windows 安裝完成 顯示 get 技術分享 開發平臺 org www 1 開發平臺 windows7 64位 2 下載鏈接 http://www.lua.org/download.html 3 安裝完成-環境配置 4 運行 WIN+R 運行
Gdb學習筆記1
help 什麽 follow class 使用 停止 -s 做什麽 font 其實,從很早就開始接觸gdb程序,gdb調試程序伴我成長,現在對其用法記錄以下: 當程序的運行結果和預期結果不一致,或者程序出現運行錯誤時,gdb就可以派上大用處了。調試的基本過程是:
tableau學習筆記—1
類型 date pan 故事 功能介紹 -c images 數據 tps 第一部分 第一章 數據可視化 1.1 用數據講故事 1.2 數據不只是數字 1.3 在數據中尋找什麽(關系、模式、異常) 第二章 Tableau概述 2.1 Tableau概述
AngularJs學習筆記1——總體介紹
一個 web 依賴 領域 升級 title del 元素 image 這周末在家呆了兩天,正好中午閑暇時間繼續分享Angularjs相關,今天主要分享Angularjs總體介紹及數據綁定部分內容,下面直接進入主題。 1、基本概念: AngularJS是為了克
JavaSE中Collection集合框架學習筆記(1)——具有索引的List
alt 很快 存取 array 架構圖 一是 第一個元素 技術 發現 前言:因為最近要重新找工作,Collection(集合)是面試中出現頻率非常高的基礎考察點,所以好好惡補了一番。 復習過程中深感之前的學習不系統,而且不能再像剛畢業那樣死背面試題,例如:String是
Linux學習筆記1-CentOS7不能聯網、關閉防火墻
rest attr network key 重啟 -s 筆記 aid com 在使用虛擬機安裝完CentOS7後是不能上網的,需要做以下設置: 1、將虛擬機的網絡設置為橋接模式 2、修改文件 /etc/sysconfig/network-scripts下的ifcfg-enp
PHP:學習筆記(1)——環境配置
work tex name sso works fontsize repl img 編輯 PhpStorm配置PHP環境(轉自Han-kanon) 說明: 通過Setting 有 languages &frameworks 有php 選擇右邊的interpre