使用GLib进行C语言编程的实例

本文将讨论使用GLib进行编程的基本步骤,GLib是一个跨平台的,用C语言编写的3个底层库(以前是5个)的集合,GLib提供了多种高级的数据结构,如内存块、双向和单向链表、哈希表等,GLib还实现了线程相关的函数、多线程编程以及相关的工具,例如原始变量访问、互斥锁、异步队列等,GLib主要由GNOME开发;本文是使用GLib编程的入门文章,旨在通过实例帮助希望学习GLib编程的读者较快地入门,本文将给出多个使用GLib库编程范例的源代码,本文程序在 ubuntu 20.04 下编译测试完成,gcc 版本号 9.4.0;本文适合初学者阅读。

1 前言

  • GLib 与 glibc 不是一个东西,glibc 是 GNU 实现的一套标准 C 的库函数,而 GLib 是 GTK+ 的一套函数库,如果非要扯上点关系,GLib 依赖于 glibc,不过 Linux 下几乎所有的应用程序都是依赖于 glibc 的;
  • GLib 最初是 GTK+ 项目(现名为 GTK)的一部分;在发布 GTK+ 版本 2 时,该项目的开发人员决定将非图形用户界面(GUI)的代码从 GTK+ 中分离出来,作为一个单独的库(GLib)发布,以使不需要使用 GUI 的开发人员可以使用这些功能,而无需依赖完整的 GUI 库,这就产生了 GLib 库;
  • GLib 是一个跨平台库,使用 GLib 编写的应用程序无需进行重大修改即可移植到不同的操作系统上,所以 GLib 不仅可以用在 Linux 下,也可以在 Windows 下使用;
  • GLib 仍然在不断地开发中,截止到 2024 年 7 月,GNOME 已经发布了 GLib 2.9版。
  • GLib 包由五个库组成:
    • GObject
    • GLib
    • GModule
    • GThread
    • GIO
  • 这 5 个库全部合并在一个库里,称为 GLib;目前在源代码中,还保留着三个目录:GLib、GObject 和 GIO,GModule、GThread 已经放在 GLib 中了,所以现在通常认为 GLib 是 3 个底层库的集合;
  • C 语言有一些令程序员头疼的数据类型,比如指针、字符串(以nul为结束符),GLib 拥有一系列自身的数据类型,较好地解决了这个问题;
  • GLib 的设计很多都是面向对象的,所有可以使用面向对象的概念进行 C 语言编程;
  • GLib API version 2.0 (点击查看 API 手册)

2 如何将一个程序按 GLib 的方式改写

  • 先使用标准 C 语言按照题目要求编写一个简单的程序,这个题目的原型出自 Advent of Code - 2019

  • 题目:宇宙飞船飞回地球需要多少燃料?飞船所需的燃料与飞船的质量有直接的关系,计算方式为:飞船质量 ÷ 3,结果向下取整,再减 2,若结果小于 0,则为 0;

    • 如果飞船质量为 12,除以 3 为 4,再减 2 则结果为 2;
    • 如果飞船质量为 14,除以 3 向下取整为 4,再减 2 其结果为 2;
    • 如果飞船质量为 1969,则所需燃料为 654;
  • 这个问题的难点在于当我们计算出所需燃料后,实际上飞船的总质量已经改变,变成了飞船质量 + 燃料质量,需要为增加的燃料再补充适当的燃料,所以这实际上是一个递归计算;

  • 按照标准 C 语言编写的源程序:puzzle-2019.c(点击文件名下载源程序)

    #include <stdio.h>
    #include <stdlib.h>
    
    #include <math.h>
    
    // Calculate the fuel required
    int calculate_fuel(int weight) {
        int additional_weight = fmax(weight / 3 - 2, 0);
    
        printf("Weight: %d\tAdditional weight(Fuel required): %d\n", weight, additional_weight);
        if (additional_weight > 0) {
            additional_weight += calculate_fuel(additional_weight);
        }
    
        return add
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whowin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值