C库代码的正确命名约定

C库代码的正确命名约定,c,naming-conventions,standards,naming,C,Naming Conventions,Standards,Naming,命名基于C的代码库/API中的文件和函数的正确方法是什么?您可以(但不应该)做的是完全不小心,完全不使用系统的命名约定。这“管用”,但会让你的客户感到不舒服;他们没有简单的方法知道他们可以在自己的程序中使用哪些名称。(我遇到一个库,该库为其内部使用定义了一个名为error()的未记录函数。该名称与外部记录的名称空间的任何部分都不匹配。当时,我自己的一个标准错误报告函数也被称为error()——尽管它现在是error();这意味着我无法在该库中使用自己的标准错误报告函数。结果是,如果不必使用该库,

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

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

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

您的公共头应该使用一个(或很少几个)系统前缀,这是有文档记录的。通常,您会选择一个前缀,如PFX,并使用该前缀:

  • 枚举常量开始<代码>PFX
  • 宏启动
    PFX\ux
  • 功能启动
    pfx
  • 全局变量(您没有任何这些变量,是吗)从
    pfx\ux
    开始
  • 键入名称和结构或联合标记开始
    pfx\ux
  • 在自己的源文件之外可见的私有变量和函数都有一个系统前缀(可能再次使用
    pfx\u
    ,或者可能是
    pfxp\u
    ,其中最后一个
    p
    是私有的,或者可能是
    pfx[a-Z]
    ,这样私有名称可以用驼峰格式,但以
    pfx
    开头)
只有严格属于文件范围(无外部链接)的变量或函数不受这些规则的约束,但即使如此,还是建议使用命名约定(因此,如果一个函数需要在以后由两个文件使用,则不必修改以前函数为
静态
)的代码中的调用)

通过这种方式,您可以简单地记录以
PFX\u
PFX\u
开头的名称由您的库保留。用户仍然可以使用具有相同前缀的名称(您不能阻止它们),但这样做的风险由他们自己承担,因为升级库可能会添加保留的名称。他们可以很清楚地记住你的名字,因为你已经记录了他们,并且文档(相对)容易理解


注意,C标准和POSIX标准都为保留名称制定了规则。然而,保留的POSIX和C名称的规则比仅仅一个前缀要复杂得多。他们也在打扫。例如,如果包含任何POSIX头,POSIX会保留所有以
\u t
结尾的名称作为类型名使用。

好吧,在C中,您没有方法,所以不用担心一件事。开玩笑。只要看看一些开源的C库,选择一个你最喜欢的。关于样式,一致性要比正确性好得多(如果有关于编码样式的事情)。文件名必须遵循文件系统的规则。C函数名必须以非数字字符开头,并且只能由构成有效标识符的字符组成。您本质上是在寻求编码标准的建议。这是品味的问题,真的。不管怎么说,这都是一个“谢谢”的骗局。因此,几乎可以替代objc标准,例如objc中的ASIWebPageRequest方法可以是c中的asi_web_page_请求?@user773578 ASIWebPageRequest不是一个方法,而是一个类。按照这些一般思路,是的。经典的(看看C标准)函数名是小写的。宏往往是大写的。类型主要是小写等。最重要的是定义一组规则,然后一致地应用它们。甚至可以使用
nm
来识别对象文件中定义的符号,并确保它们符合您的规则。人们通常不会这样做,但如果没有一致的规则,使用图书馆就更难了。