5

命名作为基于 C 的代码库/API 一部分的文件和函数的正确方法是什么?

4

1 回答 1

8

可以(但不应该)做的是完全不小心,并且根本不使用系统的命名约定。这“有效”,但会让您的客户感到不舒服;他们没有简单的方法知道可以在自己的程序中使用哪些名称。(我遇到了一个库,它为其内部使用定义了一个未记录的函数,称为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 保留所有以作为类型名称结尾的名称。

于 2012-04-04T23:11:10.287 回答