命名空间¶
符号(函数和类型)和文件的持续且完整的命名空间对于两个关键原因至关重要
建立一种约定,这意味着开发者只需要学习更少的符号名称就可以使用该库——他们可以可靠地推断这些名称。
确保两个项目的符号在包含在同一文件中时不会冲突。
第二点很重要——想象一下,如果每个项目都导出一个名为 create_object() 的函数会发生什么。定义它们的头文件无法包含在同一个文件中,即使克服了这个问题,程序员也无法知道每个函数来自哪个项目。命名空间通过为项目中的每个符号和文件名使用唯一的、一致的前缀,将符号分组到它们所属的项目中,并将它们与其他项目分隔开,从而消除了这些问题。
以下约定应用于所有符号的命名空间。它们被用于所有基于 GLib 的项目中,因此许多开发者应该都熟悉它们
函数应使用
小写字母加下划线(也称为蛇形命名法)。结构体、类型和对象应使用
驼峰命名法不含下划线。宏和常量应使用
大写字母加下划线。所有符号都应以命名空间的简短版本(2-4 个字符)作为前缀。这只是为了方便键入而缩短,但仍然应保持唯一性。
类中的所有方法也应以类名作为前缀。
此外,公共头文件应从一个子目录中包含,从而有效地命名空间化头文件。例如,不要使用 #include <abc.h>,项目应允许其用户使用 #include <namespace/abc.h>。
有些项目在其子目录中命名空间化它们的头文件——例如,使用 #include <namespace/ns-abc.h> 而不是 #include <namespace/abc.h>。这是一种冗余的做法,但无害。
例如,对于一个名为“Walbottle”的项目,可以选择简短的命名空间“Wbl”。如果它有一个“schema”类和一个“writer”类,它将安装头文件
$(includedir)/walbottle-$API_MAJOR/walbottle/schema.h$(includedir)/walbottle-$API_MAJOR/walbottle/writer.h
(上面使用 $API_MAJOR 是为了实现并行安装性)
对于 schema 类,将导出以下符号(除其他外),遵循 GObject 约定
WblSchema结构体WblSchemaClass结构体WBL_TYPE_SCHEMA宏WBL_IS_SCHEMA宏wbl_schema_get_type函数wbl_schema_new函数wbl_schema_load_from_data函数