こんにちは最近私はオンラインで(SOでも)たくさんのコードを見ました:
char *p = malloc( sizeof(char) * ( len + 1 ) );
なぜsizeof(char)なのか?必要ないですね。それともスタイルの問題ですか?それにはどんな利点がありますか?
はい、これはスタイルの問題です。なぜなら、sizeof(char)
は常に1であると期待するからです。
一方、malloc
を実行するときにsizeof(foo)
を使用することは非常に慣用的であり、最も重要なことはコードを自己文書化することです。
おそらくメンテナンスにも適しています。 char
からwchar
に切り替える場合は、
_wchar *p = malloc( sizeof(wchar) * ( len + 1 ) );
_
あまり考えずに。一方、ステートメントchar *p = malloc( len + 1 );
の変換には、さらに検討が必要です。それはすべて精神的なオーバーヘッドを減らすことです。
そして@Nyanがコメントで示唆しているように、あなたも行うことができます
_type *p = malloc( sizeof(*p) * ( len + 1 ) );
_
ゼロで終了する文字列と
_type *p = malloc( sizeof(*p) * len ) );
_
通常のバッファ用。
操作を自己文書化するのに役立ちます。言語はcharをちょうど1バイトとして定義します。一部のマシンには8、12、16、19、または30ビットの最小アドレス可能単位(またはそれ以上)があるため、そのバイトにあるbitsの数は指定しません。ただし、charは常に1バイトです。
仕様では、文字は1バイトであることを規定しているため、厳密にオプションです。私は個人的に常にsizeof
を一貫性の目的で含めていますが、それは問題ではありません