我正在努力寻找有关中型C库项目的函数命名约定的实用建议。我的库项目分为几个模块和带有各自标题的子模块,并且松散地遵循OO风格(所有函数均以某个结构作为第一个参数,而没有全局变量等)。它奠定了我们这样的东西:
MyLib
- Foo
- foo.h
- foo_internal.h
- some_foo_action.c
- another_foo_action.c
- Baz
- baz.h
- some_baz_action.c
- Bar
- bar.h
- bar_internal.h
- some_bar_action.c
一般来说,功能远远太大,(例如)棒some_foo_action
,并another_foo_action
在一个foo.c
实现文件,使大多数功能静态的,收工。
在构建库时,我可以处理去除内部(“模块私有”)符号的问题,以避免用户与其客户端程序发生冲突,但是问题是如何在库中命名符号?到目前为止,我一直在做:
struct MyLibFoo;
void MyLibFooSomeAction(MyLibFoo *foo, ...);
struct MyLibBar;
void MyLibBarAnAction(MyLibBar *bar, ...);
// Submodule
struct MyLibFooBaz;
void MyLibFooBazAnotherAction(MyLibFooBaz *baz, ...);
但是,我最终得到了疯狂的长符号名(比示例长得多)。如果我没有在名称前添加“假名称空间”,则模块的内部符号名称会发生冲突。
注意:我不在乎骆驼案/帕斯卡案等,只是名字本身。
git merge
输入有很大帮助。作为一个例子我具有用于与OpenGL绘图UI的模块,并且我有单独的.c
每个元素的文件,我需要(slider.c
,indicator.c
等)。这些元素实现具有一个主要的绘图功能,可能长达几百行,并且内部有大量的static
助手。他们还从UI模块中调用了一些纯几何函数。这听起来很典型吗?