私はactully移動することは何もないとき/治療の例に必要でコピーしていますmemmove()
/ memcpy()
エッジケースなど
int numberOfBytes = ...
if( numberOfBytes != 0 ) {
memmove( dest, source, numberOfBytes );
}
または私はチェックせずに関数を呼び出す必要があります
int numberOfBytes = ...
memmove( dest, source, numberOfBytes );
前のスニペットのチェックは必要ですか?
6
質問は私にfreeのような関数のnullポインタをチェックすることを少し思い出させます。必要ではありませんが、コメントを書いて、あなたがそれについて考えたことを示します。
—
ヒキガエル
@Toad:コードを散らかす以外に、それはどのような目的に役立ちますか?誰かのコードを読むとき、私は元のプログラマーが「実際には必要ではないこの操作をすることを考えましたが、それは不必要なのでそれをしませんでした」ということを知る必要はありません。ポインターが解放されているのを見つけたら、nullが許可されていることを知っているので、「nullをチェックするべきか」についての元のプログラマーの考えを知る必要はありません。同じことが0バイトのコピーにも
—
当てはまり
memcpy
@jalf:それがスタックオーバーフローに関する質問であるという事実は、人々に疑わしいものにします。コメントを追加しても役に立たないかもしれませんが、知識の少ない人には役立つかもしれません
—
Toad
@Toadええ、コメントは、なぜ必要と思われるチェックが実際には価値がないのかを明確に指摘しているので、原則として価値があります。コインのもう一方の側面は、この特定の例は、各プログラマーが一度だけ答えを学ぶ必要がある標準ライブラリー関数を含む一般的なケースであるということです。そうすれば、読んだプログラムで、これらのチェックが不要であることを認識できます。その理由は、私はコメントを省略すると思います。このような複数の呼び出しがあるコードベースは、コメントをそれぞれにコピーして貼り付けるか、どちらかが醜いいくつかの呼び出しでのみ任意に使用する必要があります。
—
Mark Amery