多种用途的结构方法的命名约定

时间:2012-06-27 16:48:24

标签: c naming-conventions naming

我正在编写一个小型库,并在命名约定上苦苦挣扎。有一个名为gk_Stream的结构定义如下:

typedef struct gk_Stream {
    gk_Stream_writeProc write;
    gk_Stream_readProc read;
    void* data;                 // Pointer to data needed by read and write procedures.
} gk_Stream;

现在,我想为这个结构提供2个内置用途。

  1. 从/ {到FILE*
  2. 读/写
  3. 从缓冲区读取/写入
  4. 我首先调用了以下函数:

    gk_Stream_initWithFile(gk_Stream* stream, FILE* fl);
    
    gk_Stream_initWithBufferSize(gk_Stream* stream, size_t bufferSize);
    gk_Stream_initWithStringAndBufferSize(gk_Stream* stream, char* string, size_t string_length, size_t buffer_size);
    gk_Stream_deallocBuffer(gk_Stream* stream);
    

    但另一种可能性是将它们称为:

    gk_Stream_file_init(/* */);
    gk_Stream_buffered_initWithSize(/* */);
    gk_Stream_buffered_initWithStringAndSize(/* */);
    gk_Stream_buffered_dealloc(/* */);
    

    您认为哪些名称最有意义或最佳?使用库时,您希望使用哪些名称?

4 个答案:

答案 0 :(得分:4)

怎么样:

gk_Stream_file_init(gk_Stream* stream, FILE* fl);
gk_Stream_file_deinit(gk_Stream* stream); /* not sure if necessary */
gk_Stream_buffer_init(gk_Stream* stream, size_t bufferSize);
gk_Stream_buffer_initWithString(gk_Stream* stream, char* string, size_t string_length, size_t buffer_size);
gk_Stream_buffer_deinit(gk_Stream* stream);

当我听到或读取“缓冲”时,我认为这是内部使用的方法,用于在写入/读取文件或管道等内容时提高性能。然而,这不是这里发生的事情。您的代码可以使用文件或缓冲区进行I / O操作,因此函数名称可以区分对文件执行操作与缓冲区,而不是文件和缓冲

编辑:哦,我忘了解释另一件事;我也希望deinit改为dealloc,因为deinitinit的自然伴侣。解除分配可能是你如何取消初始化流,但是你的库的所有用户需要知道的是他们正在对流进行取消初始化。

答案 1 :(得分:1)

C中没有标准/推荐的命名约定。

使用您认为最适合代码可读性的任何内容,与其余代码/项目中遵循的命名约定一致。

答案 2 :(得分:1)

在某种程度上取决于缓冲情况下字符串参数的用途。

我可能会选择以下内容:

gk_Stream_file_init(gk_Stream *stream, FILE *f);
gk_Stream_mem_init(gk_Stream *stream, size_t buff_sz, const char *initval, size_t initval_sz);
gk_Stream_mem_free(tk_Stream *stream);

然后允许NULL initval。

答案 3 :(得分:1)

我会这样做:

gk_Stream_InitWithFile(gk_Stream* stream, FILE* fl);
gk_Stream_Deinit(gk_Stream* stream);
gk_Stream_InitWithBufferSize(gk_Stream* stream, size_t buffer_size);
gk_Stream_InitWithStringAndBufferSize(gk_Stream* stream, char* string, size_t string_length, size_t buffer_size);

强调将“命名空间”,CamelCase用于函数名称。变量的lower_case。