命名作为基于 C 的代码库/API 一部分的文件和函数的正确方法是什么?
1 回答
您可以(但不应该)做的是完全不小心,并且根本不使用系统的命名约定。这“有效”,但会让您的客户感到不舒服;他们没有简单的方法知道可以在自己的程序中使用哪些名称。(我遇到了一个库,它为其内部使用定义了一个未记录的函数,称为error()
. 该名称与外部记录的命名空间的任何部分都不匹配。当时,我自己的一个标准错误报告函数也被调用error()
了——尽管现在是err_error()
;这意味着我不能在那个库中使用我自己的标准错误报告函数。结果是如果我不需要的话,我没有使用那个库;使用起来太麻烦了。)
所以,你不应该那样。你应该小心你暴露的名字。
您的公共标头应使用一个(或极少数)系统前缀,这些前缀已记录在案。通常,您会选择一个前缀,例如 PFX,并使用它:
- 枚举常量开始
PFX_
。 - 宏开始
PFX_
。 - 功能启动
pfx_
。 - 全局变量(你没有这些,是吗) start
pfx_
。 - 类型名称和结构或联合标记开始
pfx_
。 - 您在自己的源文件之外可见的私有变量和函数具有系统前缀(可能
pfx_
再次,或者可能pfxp_
最后一个p
是私有的,或者可能pfx[A-Z]
私有名称是驼峰式的,但以 开头pfx
)。
只有严格文件范围(无外部链接)的变量或函数不受这些规则的约束,但即便如此,还是建议使用命名约定(因此,如果一个函数需要稍后由两个文件使用,你不要'不必修改函数先前所在的代码中的调用static
)。
这样,您可以简单地记录名称开始PFX_
或pfx_
由您的图书馆保留。用户仍然可以使用具有相同前缀的名称(您无法阻止它们),但这样做的风险自负,因为升级到库可能会添加保留的名称。他们可以清楚地知道您的姓名,因为您已经记录了他们,并且因为文档(相对)易于理解。
请注意,C 标准和 POSIX 标准都制定了保留名称的规则。但是,保留的 POSIX 和 C 名称的规则比单个前缀要复杂得多。他们也在扫地。例如,_t
如果包含任何 POSIX 标头,则 POSIX 保留所有以作为类型名称结尾的名称。