C库代码的正确命名规范是什么?

5

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


1
在C语言中,你没有方法可用,所以少了一件要担心的事情。开个玩笑。只需要查看一些开源的C库并选择你最喜欢的一个即可。关于风格,保持一致比保持“正确”(如果在编码风格方面有这样的东西的话)要好得多。 - C2H5OH
文件名必须遵循您的文件系统规则。C函数名称必须以非数字字符开头,并且只能由形成有效标识符的字符组成。 - Kerrek SB
1
你基本上是在寻求编码标准的建议。这实际上是一个品味问题。无论如何,这是一个重复的问题,参考链接:https://dev59.com/l3M_5IYBdhLWcg3wt1g0#1262992。 - James Youngman
1个回答

8
您可以(但不应该)完全不加规划地使用无系统命名约定,但这会给客户带来不便;他们没有简单的方法知道哪些名称可在其自己的程序中使用。例如,我曾经遇到过一种库,它为内部使用定义了一个未记录的函数,称为error()。该名称与任何已记录的外部命名空间都不匹配。而当时,我的一个标准错误报告函数也被称为error(),尽管现在更名为err_error()。这意味着我不能使用我的标准错误报告函数与那个库。结果是如果不得不使用该库,我不得不费很大劲才行。
因此,您不应该像那样不经意地处理名称。在公共头文件中,您应该使用一个(或很少的)系统前缀,并将其记录下来。通常,您会选择类似PFX这样的前缀,并使用它:
- 枚举常量以PFX_开头。 - 宏以PFX_开头。 - 函数以pfx_开头。 - 全局变量(您没有这样的变量,对吧)以pfx_开头。 - 类型名称和结构或联合标记以pfx_开头。 - 可以从其自己的源文件外部看到的私有变量和函数具有系统前缀(可能再次是pfx_,或者最后一个p是私有的,或者是pfx[A-Z],因此私有名称是驼峰式但以pfx开头)。
只有严格的文件作用域变量或函数(没有外部连接)不受这些规则的限制,但即使在这种情况下,使用命名约定也是明智的(因此,如果某个函数以后需要被两个文件使用,则无需修改先前将函数标记为静态的代码中的调用)。
这样,您可以简单地记录以PFX_或pfx_开头的名称专为您的库保留。用户仍然可以使用具有相同前缀的名称(您不能阻止他们),但他们这样做是自己承担风险,因为更新库可能会添加保留名称。他们可以远离您的名称,因为您已经记录了它们,并且文档(相对而言)易于理解。
请注意,C标准和POSIX标准都制定了保留名称的规则。但是,保留POSIX和C名称的规则比单一前缀复杂得多。它们也更加广泛。例如,如果包含任何POSIX头,则POSIX将所有以_t结尾的名称保留供用作类型名称。

谢谢。所以基本上,用C语言替换Objc标准,例如ASIWebPageRequest方法在Objc中可以是asi_web_page_request? - user773578
@user773578 ASIWebPageRequest不是一个方法,而是一个类。 - Richard J. Ross III
沿着这些一般的方向,是的。经典地(看看C标准),函数名是小写的。宏倾向于大写。类型主要是小写等。最重要的是定义一组规则,然后始终应用它们。甚至使用nm来识别目标文件中定义的符号,并确保它们符合您的规则。人们通常不这样做,但是如果没有一致的规则,使用库会更加困难。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接