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 を実行できるため、関数名で、 file とbufferedではなく、 file とbufferで操作を実行することを区別することは理にかなっています。

編集: ああ、もう 1 つ説明するのを忘れていました。の自然な仲間であるようdeinitdealloc、私も好むでしょう。解放はおそらくストリームを初期化解除する方法ですが、ライブラリのユーザーが知る必要があるのは、ストリームを初期化解除していることだけです。deinitinit

于 2012-06-27T17:16:11.060 に答える
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初期化を許可します。

于 2012-06-27T17:09:12.947 に答える
1

C には、標準/推奨の命名規則はありません。

コード/プロジェクトの残りの部分で従う命名規則と一致して、コードの読みやすさに最適と思われるものを使用してください。

于 2012-06-27T17:00:39.597 に答える
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 に答える