glib是否能以一种不引人注目的方式使用?

我正在为标准C库之上的C寻找一个好的通用库,并且已经看到了一些使用glib的建议。 你的代码中有多么“突兀”? 为了解释我所说的突兀是什么意思,我在参考手册中注意到的第一件事是基本类型部分 ,对自己思考,“我将开始使用gintgchar和gprefixing geverything gin gmy gcode gnow?”

更一般地说,您是否可以仅在本地使用它而不需要在代码中使用其他function或文件来了解其用途? 它是否强制对代码进行某些假设,或者对编译/链接过程施加约束? 它是否在运行时为全局数据结构占用了大量内存? 等等

关于glib最突出的一点是,使用它的任何程序或库都不能很好地防止资源耗尽。 它无条件地在malloc失败时调用abort ,并且你无法解决这个问题,因为整个库的设计都围绕着它们的内部分配函数g_malloc “不能失败”的概念。

至于丑陋的“g”类型,你绝对不需要任何演员阵容。 这些类型100%相当于标准类型,基本上只是从glib的早期(错误)设计中汲取。 不幸的是,glib开发人员对C语言缺乏了解,这可以通过这个FAQ来certificate:

为什么要使用g_print,g_malloc,g_strdup和其他glib函数?

“关于g_malloc(),g_free()和兄弟,这些函数比它们的libc更安全。例如,如果用NULL调用,则返回g_free()。

(来源: https : //developer.gnome.org/gtk-faq/stable/x908.html )

FYI, free(NULL)是完全有效的C,并且完全相同:它只返回。

我专业地使用了GLib超过6年,除了赞美之外别无他法。 它非常轻量级,有很多很棒的工具,比如列表,哈希表,rand函数,io-libraries,线程/互斥/条件甚至是GObject。 全部以便携方式完成。 事实上,我们在Windows,OSX,Linux,Solaris,iOS,Android和Arm-Linux上编译了相同的GLib代码,而且没有任何问题。

在突兀方面,我绝对“买入了g”,毫无疑问,这对于以极快的速度生成稳定,可移植的代码非常有益。 也许特别是在编写高级测试时。

如果g_malloc不适合你的目的,那么只需使用malloc,当然这也适用于所有这些。

当然,你可以“在其他地方忘记它”,除非那些其他地方以某种方式与glib代码交互,然后有一个连接(并且,可以说,你不是真的“在其他地方”)。

您不必使用具有前置ggchargint等)的常规类型的类型; 它们保证与charint等相同。 例如,你永远不需要转换为/来自gint

我认为目的是应用程序代码永远不应该使用gint ,它只是包含在内以便glib代码可以更加一致。