Why does “The C Programming Language” book say I must cast malloc?
今天,我到达了C编程语言(第二版Brian W.Kernighan&Dennis M.Ritchie)的第167页,发现作者说我必须强制执行
7.8.5 Storage Management
The functions malloc and calloc obtain blocks of memory dynamically.
1returns a pointer to n bytes of uninitialized storage, or NULL if the request cannot be satisfied.
1returns 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
我已经知道
但我的问题是:为什么这本书说我应该投它?
来自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 achar * . The newvoid * 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.< /块引用>