正确的C库代码命名约定

use*_*578 5 c standards naming naming-conventions

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

Jon*_*ler 6

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

所以,你不应该那样.你应该小心你公开的名字.

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

  • 枚举常量开始PFX_.
  • 宏开始PFX_.
  • 功能开始pfx_.
  • 全局变量(你没有任何这些,你呢)开始pfx_.
  • 类型名称和结构或联合标签开始pfx_.
  • 您在自己的源文件之外可见的私有变量和函数具有系统前缀(可能pfx_再次,或者可能pfxp_是最后一个p用于私有的,或者可能pfx[A-Z]是私有名称是驼峰式的,但开头pfx).

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

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

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