关于演员:为什么“C程序设计语言”一书说我必须演出malloc?

Why does “The C Programming Language” book say I must cast malloc?

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

7.8.5 Storage Management

The functions malloc and calloc obtain blocks of memory dynamically.

1
void *malloc(size_t n)

returns a pointer to n bytes of uninitialized storage, or NULL if the request cannot be satisfied.

1
void *calloc(size_t n, size_t size)

returns a pointer to enough free space for an array of n objects of the specified size, or NULL if
the request cannot be satisfied. The storage is initialized to zero.
The pointer returned by malloc or calloc has the proper alignment for the object in question,
but it must be cast into the appropriate type, as in

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

我已经知道malloc及其家族返回void*类型,有很好的解释为什么不强制执行malloc

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


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

In pre-ANSI C -- as described in K&R-1 -- malloc() returned a char *
and it was necessary to cast its return value in all cases where the
receiving variable was not also a char *. The new void * type in
Standard C makes these contortions unnecessary.

To save anybody from the embarrassment of leaping needlessly to the
defence of K&R-2, I asked Dennis Ritchie for an opinion that I could
quote on the validity of the sentence cited above from page 142. He
replied:

In any case, now that I reread the stuff on p. 142, I think it's
wrong; it's written in such a way that it's not just defensive
against earlier rules, it misrepresents the ANSI rules.

< /块引用>