我正在编写一个小型库,并在命名约定上苦苦挣扎。有一个名为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(/* */);
您认为哪些名称最有意义或最佳?使用库时,您希望使用哪些名称?
答案 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
,因为deinit
是init
的自然伴侣。解除分配可能是你如何取消初始化流,但是你的库的所有用户需要知道的是他们正在对流进行取消初始化。
答案 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。