正确的C库代码命名约定

时间:2012-04-04 23:00:57

标签: c naming-conventions standards naming

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

1 个答案:

答案 0 :(得分:6)

可以不应该)所做的事情是完全不小心的,根本不使用系统的命名约定。这“有效”,但让您的客户感到不舒服;他们没有简单的方法知道他们可以在自己的程序中使用哪些名称。 (我遇到了一个库,它为内部使用定义了一个名为error()的未记录函数。该名称与外部记录的名称空间的任何部分都不匹配。当时,我自己的一个标准错误报告函数也被称为error() - 虽然它现在是err_error();这意味着我无法使用我自己的标准错误报告功能与该库。结果是我没有使用该库,如果我没有'必须;使用它太麻烦了。)

所以,你不应该那样。你应该小心你所暴露的名字。

您的公共标题应使用一个(或极少数)系统前缀,这些前缀已记录在案。通常,您选择PFX等前缀,然后使用:

  • 枚举常量start PFX_
  • 宏启动PFX_
  • function start pfx_
  • 全局变量(你没有这些,是吗)启动pfx_
  • 类型名称和结构或联合标记从pfx_开始。
  • 您在自己的源文件外可见的私有变量和函数有一个系统的前缀(可能再次pfx_,或者pfxp_,其中最后p是私有的,或许是pfx[A-Z]以便私人名称以驼峰为主,但以pfx开头。

只有严格文件范围的变量或函数(没有外部链接)不受这些规则的约束,但即便如此,建议使用命名约定(因此,如果某个函数需要稍后由两个文件使用,您不必修改以前函数static)的代码中的调用。

这样,您可以简单地记录您的图书馆保留的PFX_pfx_开头的名称。用户仍然可以使用具有相同前缀的名称(您无法阻止它们),但他们这样做会自行承担风险,因为升级到库可能会添加保留的名称。他们可以很好地清楚你的名字,因为你已经记录了它们,并且因为文档(相对)易于理解。

请注意,C标准和POSIX标准都规定了保留名称的规则。但是,保留的POSIX和C名称的规则要比单个前缀复杂得多。他们也在扫地。例如,如果包含任何POSIX标头,POSIX会保留所有以_t结尾的名称以用作类型名称。