我们正在研究用C编写的游戏引擎,目前我们正在使用以下命名约定.
ABClass object; ABClassMethod(object, args)
AB是我们的前缀.
我们的API,即使在对象上工作,也没有继承,多态或任何东西.我们所拥有的只是处理它们的数据类型和方法.
我们的常量命名相似:AB_ConstantName
预处理器宏命名为AB_API_BEGIN
.我们不使用像宏这样的函数.
我想知道这是如何适合作为C API.此外,您可能会注意到整个API都是包装器lua
,您可以使用C
或来自或lua
.大多数时候发动机将从lua使用.
无论您使用哪种API,为了您的用户的心理健康(以及您的用户),请确保它在整个代码中保持一致.
对我而言,一致性包括三件事:
命名.案件和下划线的使用应受到监管.例如:ABClass()是一个"公共"符号,而AB_Class()不是(在某种意义上它可能(无论出于何种原因)可见到其他模块,但它保留供内部使用.
如果你有"ABClass()" ,你永远不应该有"abOtherClass()"或"AbYet_anotherClass()"
名词和动词.如果某些东西被称为"点",它必须始终是"点"而不是"pnt"或"p"或类似物.
例如,标准C库同时具有putc()和putchar()(是的,它们是不同的,但名称不能告诉哪一个写在stdout上).动词也应该是一致的:避免同时使用"CreateNewPoint()","BuildCircle()"和"NewSquareMake()"!
争论的立场.如果一组相关函数采用类似的参数(例如字符串或文件),则确保它们具有相同的位置.C标准库再次使用fwrite()和fprintf()做得很差:一个将文件作为最后一个参数,另一个作为第一个参数.
其余的很大程度上取决于您的品味以及您可能遇到的任何其他限制.
例如,您提到您正在使用Lua:遵循类似于Lua的约定,如果程序员必须同时向两个API公开,则可能是一个加号.