我发现自己有许多在c中都是oo风格的函数(没有花哨的宏或函数指针只是struct +函数,它们将该结构类型作为第一个参数。 my_func_my_type是一个很好的计划吗?如果我使用它,我应该尝试保持一致吗?如果它的某个函数名称变为> 20个字符? > 25?我应该保持风格一致吗?
还有什么是构造函数/初始化程序/析构函数的良好命名方案? 有什么东西比new_my_type,init_my_type,free_my_type?
P.S。这个/ self ptr有一个好名字,或者我应该像在普通函数中那样将OO的第一个参数命名为函数(to_init,some_guy,等等)
答案 0 :(得分:3)
我个人会使用与大多数C库一致的方案,将库名称作为函数的前缀。例如void MyObject_MyFunction
。对于构建/销毁,您可以保持一致并使用MyObject_Construct
,MyObject_Destroy
。只要你保持一致,我就会说这个名字并不重要。
答案 1 :(得分:1)
'good'有点主观,但我发现选择某个方案(将struct name合并到方法中)并且严格遵循它是最容易维护的。真的很长的函数名称,我倾向于避免,如果一个函数是如此复杂,它需要这么长的名称,它可能是时候重构它,拆分成子函数等。 我也不使用下划线,但这是一个品味问题。 这里使用的样本:
typedef struct Discriminator
{
//members
} Discriminator;
DiscriminatorConstruct( Discriminator* p );
DiscriminatorDestruct( Discriminator* p );
DiscriminatorFunctionA( Discriminator* p, int arg1, int arg2 );
答案 2 :(得分:1)
由于C世界中缺少一个,C ++在命名其功能方面提供了一个有用的先例:
[[namespace::...]struct::]function
在C语言中没有类似名称空间,但您可以将它们视为相关结构共享的前缀并将其建模。为了便于阅读,有必要在视觉上区分不同的命名组件。如果你喜欢在函数中使用下划线,你可以考虑将两个下划线作为分隔符,否则可能是一个。 (从技术上讲,可能会为实现保留两个下划线,但我从来没有看到任何没有以下划线为前缀的实现标识符在内部放置双下划线。)
保持名称接近C ++还有助于程序员跨越两种语言,并在必要时来回迁移代码。类似地,可以采用C ++术语:构造函数,析构函数,可能 new 和 delete (尽管这些名称可能会变成如果C代码被移植到C ++但继续使用free / malloc,则用词不当。
恕我直言,一致而明确的命名比长标识符造成的麻烦更多,但如果某些事情变得痛苦,那么就寻求一个本地化的解决方法,如宏,内联包装函数,函数指针等。