我正在编写一个小库,并在命名约定方面苦苦挣扎。有一个叫做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 个内置用途。
- 读取/写入
FILE*
- 从缓冲区读取/写入缓冲区
我首先调用了如下函数:
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
,因为 deinit
是 init
的天然伴侣。取消分配可能是您取消初始化流的方式,但您的库的所有用户都需要知道他们正在取消初始化流。
关于c - 多用途结构方法的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11231247/