为什么这本书说我必须投malloc?

今天我到了C编程语言(第二版Brian W. Kernighan&Dennis M. Ritchie)的第167页,发现作者说我必须投射malloc 。 这是本书的一部分:

7.8.5存储管理

函数malloc和calloc动态获取内存块。

void *malloc(size_t n)

返回一个指向未初始化存储的n个字节的指针,如果请求不能满足,则返回NULL。

void *calloc(size_t n, size_t size)

为指定大小的n个对象返回一个指向足够空闲空间的指针,如果请求不能满足,则返回NULL。 存储初始化为零。 malloc或calloc返回的指针对于所讨论的对象具有正确的对齐方式,但必须将其转换为适当的类型,如

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

我已经知道malloc (及其家族)返回类型void * ,并且有很好的解释为什么不投射malloc

但我的问题是:为什么这本书说我应该投它?


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

在ANSI C之前 - 如K&R-1中所述 - malloc()返回一个char *并且在接收变量不是char *所有情况下,必须强制返回值。 标准C中新的void *类型使得这些扭曲不必要。

为了避免任何人为避免K&R-2的尴尬而尴尬,我请Dennis Ritchie提出意见,我可以引用上文第142页中引用的句子的有效性。他回答说:

无论如何,现在我重读了p上的内容。 142,我认为这是错的; 它的写法不仅仅是对早期规则的防御,它误导了ANSI规则。

链接地址: http://www.djcxy.com/p/4871.html

上一篇: Why does the Book say I must cast malloc?

下一篇: Do you cast the result of malloc?