0

我正在编写一个小库并在命名约定中苦苦挣扎。有一个结构叫做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. 从/向缓冲区读取/写入

我首先调用如下函数:

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

4 回答 4

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,因此函数名称区分对文件执行操作与对缓冲区执行操作是有意义的,而不是对文件和缓冲执行操作。

编辑:哦,我忘了解释另一件事;我也更愿意deinitdealloc因为deinit是天生的伴侣init。解除分配可能是您取消初始化流的方式,但您的库的所有用户需要知道的是他们正在取消初始化流。

于 2012-06-27T17:16:11.060 回答
1

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

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

于 2012-06-27T17:00:39.597 回答
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。

于 2012-06-27T17:09:12.947 回答
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 用于函数名称。变量的小写。

于 2012-06-27T18:09:17.677 回答