为什么"The C Programming Language"书上说我必须投马洛克?



今天我翻到了《C程序设计语言》第二版167页Dennis M. Ritchie),发现作者说我必须出演malloc。以下是书中的部分内容:

7.8.5 Storage Management

函数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

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

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

在ansi之前的C中——如K&R-1中所述——malloc()返回一个char *在所有情况下都必须强制转换它的返回值接收变量也不是char *。新的void *类型在标准C不需要这些扭曲。

为了避免任何人不必要地跳到为K&R-2辩护时,我向丹尼斯·里奇征求意见引用上面142页引用的句子的有效性。他回答:

无论如何,现在我重读了第142页的内容,我认为它是错误的;它的写作方式不仅仅是防御性的

相关内容

  • 没有找到相关文章

最新更新