Pracuję na starym kodzie i prawie każde wywołanie free () używa rzutowania na swoim argumencie. Na przykład,
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
gdzie każdy wskaźnik jest odpowiedniego (i pasującego) typu. Nie widzę w tym sensu. To bardzo stary kod, więc zastanawiam się, czy to kwestia K&R. Jeśli tak, to faktycznie chciałbym wspierać stare kompilatory, które tego wymagały, więc nie chcę ich usuwać.
Czy istnieje techniczny powód, aby używać tych odlewów? Nie widzę nawet pragmatycznego powodu, aby ich używać. Jaki jest sens przypominania sobie o typie danych tuż przed ich zwolnieniem?
EDYCJA: To pytanie nie jest powtórzeniem drugiego pytania. Drugie pytanie to szczególny przypadek tego pytania, co moim zdaniem jest oczywiste, gdyby bliscy wyborcy przeczytali wszystkie odpowiedzi.
Kolofon: Daję „const odpowiedź” znacznik wyboru, ponieważ jest to prawdziwy prawdziwy powód, dla którego może być to konieczne; Jednak odpowiedź o tym, że jest to niestandardowa wersja przed ANSI C (przynajmniej wśród niektórych programistów) wydaje się być powodem, dla którego został użyty w moim przypadku. Wiele osób tutaj ma dobre strony. Dziękuję za Twój wkład.
void*
wcześniejszej wersji C, ale tylko char*
. Więc jeśli twoje odkrycia archeologiczne ujawnią kod rzucający parametr na free (), uważam, że musi to być albo z tego okresu, albo napisany przez stworzenie z tego czasu. Nie mogę znaleźć dla tego żadnego źródła, więc powstrzymam się od odpowiedzi.