今天,我到达了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
。
但是我的问题是:为什么这本书说我应该抛弃它?
125
因为这本书很旧。
—
奥利弗·查尔斯沃思
@Michi这本书有许多事实和印刷错误(google K&R勘误表),仅与C90标准兼容,它不涉及当前的C标准,也不自1990年以来对语言进行任何更改。最糟糕的是,这本书充满了不良的编程习惯,不良的样式和代码,它们依赖于行为不明确的行为。如果您成为专业的C程序员,则必须不了解所有这些内容。
—
隆丁
...并将其与为什么当我不转换malloc的结果时编译器会抱怨吗?因此,对于C-请勿投射。对于C ++-强制转换,但不要使用,
—
鲍勃·贾维斯
malloc
因为它不是C ++-除非必须这样做-但您不应该-除了... AGGGHHHHHH !!!!! :-)
@Mandrill你读过我的问题吗?我必须为您编辑我的问题。
—
Michi