Sunday 7 January 2018

casting - Why does "The C Programming Language" book say I must cast malloc?

itemprop="text">

Today I reached page
167 of href="https://rads.stackoverflow.com/amzn/click/com/0131103628" rel="noreferrer">The
C Programming Language (second edition Brian W. Kernighan & Dennis M.
Ritchie) and found that the author says I must cast
malloc. Here is the part from the
book:





7.8.5 Storage Management




The functions malloc and calloc obtain blocks of memory
dynamically.




void
*malloc(size_t n)



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



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



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



I
already know that malloc (and its family) returns type
void*, and href="https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc">there
are good explanations why not to cast
malloc.




But
my question is: Why does the book say I should cast it?



Answer




From href="http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm">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.







No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...