我正在为标准C库之上的C寻找一个好的通用库,并且已经看到了一些使用glib的建议。 你的代码中有多么“突兀”? 为了解释我所说的突兀是什么意思,我在参考手册中注意到的第一件事是基本类型部分 ,对自己思考,“我将开始使用gint
, gchar
和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代码交互,然后有一个连接(并且,可以说,你不是真的“在其他地方”)。
您不必使用具有前置g
( gchar
, gint
等)的常规类型的类型; 它们保证与char
, int
等相同。 例如,你永远不需要转换为/来自gint
。
我认为目的是应用程序代码永远不应该使用gint
,它只是包含在内以便glib代码可以更加一致。
以上就是c/c++开发分享glib是否能以一种不引人注目的方式使用?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545705.html