Почему в Книге говорят, что я должен бросить malloc?

Сегодня я достиг страницы 167 Язык программирования C (второе издание Брайан У. Керниган и Деннис М. Ричи) и обнаружил, что автор говорит, что я должен использовать malloc. Вот часть из книги:

7.8.5 Управление хранилищем

Функции malloc и calloc динамически получают блоки памяти.

void *malloc(size_t n)

возвращает указатель на n байтов неинициализированного хранилища или NULL, если запрос не может быть удовлетворен.

void *calloc(size_t n, size_t size)

возвращает указатель на достаточное свободное пространство для массива из n объектов указанного размера или NULL if     запрос не может быть удовлетворен. Хранение инициализируется до нуля.     Указатель, возвращаемый malloc или calloc, имеет правильное выравнивание для рассматриваемого объекта,     но он должен быть отнесен к соответствующему типу, как в

int *ip;
ip = (int *) calloc(n, sizeof(int));

Я уже знаю, что malloc (и его семейство) возвращает тип void *, а есть хорошие объяснения, почему не бросать malloc.

Но мой вопрос: почему в книге говорится, что я должен ее бросить?

Ответ 1

Из http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm:

В pre-ANSI C - как описано в K & R-1 - malloc() возвращен char *и необходимо было вернуть его возвращаемую стоимость во всех случаях, когда принимающая переменная не была также char *. Новый тип void * в Стандарт C делает эти искажения ненужными.

Чтобы спасти кого-либо от смущения от необходимости прыгать защита K & R-2, я спросил Денниса Ричи, что я могу цитата о действительности приведенного выше предложения со страницы 142. Он ответил:

В любом случае, теперь, когда я перечитывал материал на p. 142, я думаю, это       неправильно; он написан таким образом, что он не просто защитный       против предыдущих правил, он искажает правила ANSI.