1. 程式人生 > >Glib學習筆記(1)

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:返回TRUEFALSE

l代表返回void*指標的--gpointer,以及一個const void*  gconstpointer

l返回可表示範圍的,例如G_MINSHORT,G_MAXSHORT

l提供給printscan函式的巨集,如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_STARTG_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