C API的命名约定

时间:2009-12-14 07:58:51

标签: c naming-conventions

我们正在研究用C编写的游戏引擎,目前我们正在使用以下命名约定。

ABClass object;
ABClassMethod(object, args)

AB 是我们的前缀。

我们的API,即使处理对象,也没有继承,多态或任何东西。我们所拥有的只是处理它们的数据类型和方法。

我们的常量命名相同:AB_ConstantName和预处理器宏的名称类似于AB_API_BEGIN。我们不使用像宏这样的函数。

我想知道它是如何适合作为C API的。另外,您可能会注意到整个API都包含在lua中,您可以使用Clua中的API。大多数情况下,发动机将从lua使用。

3 个答案:

答案 0 :(得分:6)

无论您使用哪种API,为了您的用户的心理健康(以及为您的用户),请确保它在整个代码中保持一致。

对我来说,一致性包括三件事:

  1. <强>命名即可。应该规范下划线的情况和使用。例如:ABClass()是一个“公共”符号,而AB_Class()不是(在某种意义上它可能可见(无论出于何种原因)到其他模块但它保留供内部使用。<登记/> 如果你有“ABClass()”,你就不应该有“abOtherClass()”或“AbYet_anotherClass()”

  2. 名词和动词。如果某事被称为“点”,它必须总是是“点”而不是“pnt”或“p”或类似物。
    例如,标准C库同时具有putc()和putchar()(是的,它们 不同但名称不能告诉哪一个写入stdout)。 动词也应该是一致的:避免同时使用“CreateNewPoint()”,“BuildCircle()”和“NewSquareMake()”!

  3. 参数位置。如果一组相关函数采用类似的参数(例如字符串或文件),则确保它们具有相同的位置。 C标准库再次使用fwrite()和fprintf()做得很差:一个将文件作为最后一个参数,另一个作为第一个参数。

  4. 其余的很大程度上取决于您的品味以及您可能遇到的任何其他限制。

    例如,您提到您正在使用Lua:遵循类似于Lua的约定,如果程序员必须同时向两个API公开,那么可能会有一个加分。

答案 1 :(得分:3)

这似乎足够标准。 OpenGL使用gl前缀做了它,所以你不能那么远。 :)

答案 2 :(得分:0)

有很多C API。如果你有足够的创造力来创造一个新的,那么没有“多数”可以责备你。另一方面,无论你走哪条路,都有足够的其他标准狂热者会对你生气。