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

标签 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. 从缓冲区读取/写入缓冲区

我首先调用了如下函数:

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(/* */);

您认为哪些名称最有意义或看起来/听起来最好?使用该库时,您希望使用哪些名称?

最佳答案

怎么样:

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 的天然伴侣。取消分配可能是您取消初始化流的方式,但您的库的所有用户都需要知道他们正在取消初始化流。

关于c - 多用途结构方法的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11231247/

相关文章:

c++ - 如何在 C++ 代码中包装 C 二维数组 (Foo**)?

spring - JSF 2 托管 bean 及其在 EL 表达式中使用时的方法命名约定(与 Spring 结合使用)

data-structures - 一组中 "find, remove and return an element"的术语?

c - 从 C 中的列表中删除

c++ - 将 std::string 和字符数组分成两半(有效地)

c - 处理多个 UDP 流

design-patterns - 命名类 - 如何避免将所有内容都称为 "<WhatEver>Manager"?

php - 关于 PHP 下划线命名约定(如 "_method"或 "_property")

.net - 从 F# 访问名称中包含 .base 的命名空间

javascript - 单词 "target"和 "dest"之间有什么不同