Ich arbeite an einer alten Codebasis und so ziemlich jeder Aufruf von free () verwendet eine Besetzung für sein Argument. Beispielsweise,
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
Dabei ist jeder Zeiger vom entsprechenden (und übereinstimmenden) Typ. Ich sehe überhaupt keinen Sinn darin. Es ist sehr alter Code, also frage ich mich, ob es eine K & R-Sache ist. Wenn ja, möchte ich tatsächlich die alten Compiler unterstützen, die dies möglicherweise erforderlich gemacht haben, daher möchte ich sie nicht entfernen.
Gibt es einen technischen Grund, diese Abgüsse zu verwenden? Ich sehe nicht einmal einen pragmatischen Grund, sie zu benutzen. Was bringt es, uns kurz vor dem Freigeben an den Datentyp zu erinnern?
EDIT: Diese Frage ist kein Duplikat der anderen Frage. Die andere Frage ist ein Sonderfall dieser Frage, der meiner Meinung nach offensichtlich ist, wenn die engen Wähler alle Antworten lesen würden.
Kolophon: Ich gebe der "konstanten Antwort" das Häkchen, weil dies ein guter Grund ist, warum dies möglicherweise getan werden muss. Die Antwort darauf, dass es sich um einen Pre-ANSI C-Brauch handelt (zumindest bei einigen Programmierern), scheint jedoch der Grund zu sein, warum er in meinem Fall verwendet wurde. Viele gute Punkte von vielen Leuten hier. Vielen Dank für Ihre Beiträge.
void*
C vor dem Standard, sondern nur char*
. Wenn Ihre archäologischen Funde also Code enthüllen, der den Parameter in free () umwandelt, muss er meiner Meinung nach entweder aus dieser Zeit stammen oder von einer Kreatur aus dieser Zeit geschrieben worden sein. Ich kann jedoch keine Quelle dafür finden, daher werde ich nicht antworten.