GLib介绍

本文介绍了GLib库的基础数据类型、宏定义、错误检测机制、内存管理方式以及常用的数据结构等核心内容,包括链表、树、散列表等,并详细说明了每种类型的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准的GLib数据类型:

gboolean 真或假,与GLib定义的TRUE和FALSE常量一起使用
gpointer 通用指针,即void *
gchar和guchar 字符和无符号字符
gint、guint、gshort 有符号和无符号数据类型
glong、gulong 长度根据硬件和操作系统体系结构的不同而变化
gint8、guint8、gint16、guint16、gint32、guint32 具有已知长度的有符号和无符号的整数数据类型。
gint64、guint64 64位有符号和无符号整数
gfloat、gdouble 浮点数
gsize 无符号整数
gssize 有符号整数


1.分隔符宏和常量

G_DIR_SEPARATOR  字符,Windows下是'\',Linux下是'/'

G_DIR_SEPARATOR_S    字符串

G_SERACHPATH_SEPARATORPATH分隔符,Windows下是';',Linux下是':'

G_SERACHPATH_SEPARATOR_S   字符串

2.算数宏

MIN(x, y)

MAX(x, y)

ABS(x)

CLAMP(x, y, z)  锁定给定范围的一个值


错误检测

g_assert() 条件为假,程序终止

g_assert_not_reached()不应该到达的点,如果执行,则程序将会终止

g_return_if_fail 条件为假,函数返回,程序不终止

g_return_val_if_fail 增加一个返回值

g_error() 输出错误消息并终止程序

g_warning() 不终止程序,只输出错误消息


使用内存

g_malloc和g_free,函数失败将终止应用程序,其工作与malloc和free几乎相同。


数据结构:

单向链表

struct GSList
{
gpointer data;
GSList *next;
}

双向链表

struct GList
{
gpointer data;
GList  *next;
GList *prev;
}

建立表是初始化一个表指针为NULL,而不是建立一个空表。

删除表 g_slist_free()、g_list_free()

插入表项 g_slist_append、g_slistprepend、g_list_append、g_list_prepend、g_list_insert

表中移动

单项链表 g_slist_next、g_slit_last

双向链表g_list_next、g_list_last、g_list_first、g_list_previous

排序 g_list_sort、g_list_find_custom


树、散列表、夸克

GTree * g_tree_new(GCompareFunc ComparisonFunction);

g_tree_insert()

g_tree_remove()

g_tree_lookup()

g_tree_traverse()

g_tree_destroy()


扩展数据类型:

GString

g_string_new

g_string_sized_now

g_string_assign

g_string_append

g_string_prepend

g_string_insert

g_string_up

g_string_down

g_string_erase


计时器GTimer

g_timer_new

g_timer_start

g_timer_stop

g_timer_elapsed

g_timer_reset

g_timer_destroy

### U8glib 库的功能和用途 #### 文件介绍 U8glib 是一个单色图形库,专为 LCD 和 OLED 显示屏设计。此库提供了多种驱动程序支持不同的显示器型号,并允许开发者轻松创建图形界面。GitHub 地址位于 https://github.com/olikraus/u8glib [^1]。 #### 主要功能 - **多显示器兼容性**:支持广泛的单色液晶和有机发光二极管屏幕。 - **绘图函数**:提供基本形状绘制能力,如线条、矩形、圆形等。 - **文字渲染**:内置英文字体集合,可以用来显示字符和字符串。 - **位图处理**:能够加载并展示黑白图像数据。 - **硬件接口适配**:适用于 SPI/I2C 接口通信方式连接到微控制器上。 #### 使用说明 为了更好地理解如何应用 U8glib,在初始化阶段通常需要完成以下几个方面的工作: ##### 安装依赖项 确保安装了必要的 Arduino IDE 插件或其他开发环境插件来管理外部库文件。 ##### 初始化设置 ```cpp #include "U8glib.h" // 创建 U8GLIB 对象实例化特定类型的显示器对象 U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0, SCL_PIN, SDA_PIN); ``` ##### 编写循环逻辑 在 `loop()` 函数内编写刷新画面的内容: ```cpp void loop() { // 清除缓冲区 u8g.firstPage(); do { draw(); // 自定义绘画方法 } while (u8g.nextPage()); delay(50); // 延迟一段时间再重画下一帧 } void draw(void){ // 绘制一些东西... } ``` 值得注意的是,尽管 U8glib 功能齐全且稳定可靠,但由于其已停止更新,因此对于新的项目而言,推荐考虑转向由同一作者维护的更加先进和完善的新版本——即 U8g2 或者针对资源受限设备优化过的 U8x8 版本[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值