Я работаю над старой базой кода и почти каждый вызов free () использует приведение своего аргумента. Например,
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
где каждый указатель имеет соответствующий (и соответствующий) тип. Я не вижу смысла делать это вообще. Это очень старый код, поэтому мне остается только подумать, что это за K & R. Если это так, я действительно хочу поддерживать старые компиляторы, которые, возможно, требовали этого, поэтому я не хочу их удалять.
Есть ли техническая причина использовать эти приведения? Я даже не вижу прагматичной причины использовать их. Какой смысл напоминать себе о типе данных прямо перед его освобождением?
РЕДАКТИРОВАТЬ: Этот вопрос не является дубликатом другого вопроса. Другой вопрос является частным случаем этого вопроса, который, я думаю, очевиден, если близкие избиратели прочитают все ответы.
Колофон: Я ставлю галочку "const answer", потому что это реальная причина, почему это может быть необходимо сделать; тем не менее, ответ о том, что это был пре-ANSI C обычай (по крайней мере, среди некоторых программистов), кажется, является причиной его использования в моем случае. Много хороших моментов многими людьми здесь. Спасибо за ваш вклад.
void*
предстандартного C, а только char*
. Поэтому, если ваши археологические находки выявили код, приводящий параметр к free (), я считаю, что он должен быть либо из этого периода, либо написан существом того времени. Хотя я не могу найти источник для этого, поэтому я воздержусь от ответа.