私は古いコードベースで作業しており、free()のほとんどすべての呼び出しはその引数にキャストを使用します。例えば、
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
ここで、各ポインターは対応する(および一致する)タイプです。私はこれをする意味が全くないと思います。これは非常に古いコードなので、K&Rなのかどうか疑問に思います。もしそうなら、私は実際にこれを必要としたかもしれない古いコンパイラをサポートしたいので、それらを削除したくありません。
これらのキャストを使用する技術的な理由はありますか?私はそれらを使用する実用的な理由の多くを見さえしません。解放する直前にデータ型を思い出すポイントは何ですか?
編集:この質問は他の質問の重複ではありません。もう1つの質問は、この質問の特別なケースです。近い投票者がすべての回答を読んでいれば明らかです。
Colophon:「const答え」にチェックマークを付けています。これは、これを行う必要があるのは本当の理由です。ただし、それがANSI Cより前のカスタムであることについての回答(少なくとも一部のプログラマの間で)が、私の場合に使用された理由のようです。ここには多くの人々による良い点がたくさんあります。あなたの貢献に感謝します。
void*
、先行標準のC にはなく、Cだけがあったと思いますchar*
。したがって、考古学的な調査結果から、パラメーターをfree()にキャストするコードが明らかになった場合、それはその期間からのものか、その期間の生き物によって書かれたもののどちらかであると思います。ただし、これに関する情報源が見つからないため、回答を差し控えます。