【问题标题】:Good OO naming scheme for cc 的良好 OO 命名方案
【发布时间】:2011-03-09 10:25:04
【问题描述】:

我发现自己在 c 中有很多 oo 风格的函数(没有花哨的宏或函数指针,只是 struct + 函数,将结构类型作为第一个参数。 my_func_my_type 是解决此类问题的好方案吗?如果我使用它,我应该尝试保持一致吗?如果我的函数名称之一变成 > 20 个字符怎么办? > 25?即便如此,我还应该保持风格一致吗?

另外,构造函数/初始化器/析构器的良好命名方案是什么? 还有比 new_my_type 、 init_my_type 、 free_my_type 更好的东西吗?

附: this/self ptr 是否有一个好名字,或者我应该像在普通函数中那样命名 OO 类函数的第一个参数(to_init、some_guy 等)

【问题讨论】:

    标签: c oop coding-style naming-conventions naming


    【解决方案1】:

    我个人会使用与大多数 C 库一致的方案,将库名称作为函数的前缀。这会给例如void MyObject_MyFunction。对于构造/破坏,您可以保持一致并使用MyObject_ConstructMyObject_Destroy。只要你保持一致,我会说名字并不重要。

    【讨论】:

      【解决方案2】:

      'good' 有点主观,但我发现选择某种方案(将结构名称合并到方法中)并严格遵循它是最容易维护的。不过,我倾向于避免使用很长的函数名称,如果一个函数太复杂以至于需要这么长的名称,那么可能是时候重构它了,拆分成子函数等。 我也不使用下划线,但这是个人喜好问题。 此处使用的示例:

      typedef struct Discriminator
      {
        //members
      } Discriminator;
      
      DiscriminatorConstruct( Discriminator* p );
      DiscriminatorDestruct( Discriminator* p );
      DiscriminatorFunctionA( Discriminator* p, int arg1, int arg2 );
      

      【讨论】:

        【解决方案3】:

        由于在 C 世界中缺乏这样的例子,C++ 为其函数的命名提供了一个有用的先例:

        [[namespace::...]struct::]function
        

        在 C 中没有命名空间之类的东西,但您可以将它们视为相关结构共享的前缀并将其建模。为了可读性,它有助于在视觉上分离不同的命名组件。如果您喜欢在函数中使用下划线,则可以考虑使用两个下划线作为分隔符,否则可能使用一个。 (从技术上讲,可以为实现保留两个下划线,但我从未见过任何不带下划线前缀的实现标识符在内部放置双下划线)。

        保持名称接近 C++ 还有助于程序员跨越两种语言,并在必要时来回迁移代码。类似地,可以采用 C++ 术语:constructordestructor,可能还有 newdelete(尽管这些名称可能会变成如果将 C 代码移植到 C++ 但继续使用 free/malloc,则用词不当。

        恕我直言,一致和清晰的命名比长标识符节省了更多的麻烦,但如果某些事情变得很痛苦,那么请寻求本地化的解决方法,例如宏、内联包装函数、函数指针等。

        【讨论】:

        • 如果你只推荐 C++ 这个答案是不完整的。 Objective-C??!
        • @Radek:请随意评论或发表您自己的回复,包括 Objective-C 设置的任何先例——我从未使用或看过它......
        • 哦,这完全是另外一回事,但如今,Objective-C 已被广泛使用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2022-01-09
        相关资源
        最近更新 更多