为什么这本书说我必须投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