Re:The Ten Commandments for C Programmers (1987)
by throwphoton on Saturday May 23, 2020 @12:15PM
(#23284125)
What can you do with a void pointer without casting it, apart from comparing it to NULL?
[ Parent
| on HN ]
Re:The Ten Commandments for C Programmers (1987)
by eMSF on Saturday May 23, 2020 @12:21PM
(#23284180)
You can (implicitly) convert it to another pointer type, e.g.
int *buf = malloc(sizeof(*buf));
(It's noteworthy that while there's an implicit conversion above, there's no such thing as an implicit cast.)
Re:The Ten Commandments for C Programmers (1987)
by unwind on Saturday May 23, 2020 @01:44PM
(#23284861)
This is a pretty well-regarded answer, with motivation for why you should not cast [1].
Of course it's not something everyone agrees to, but at least a lot of people seem to.
[1] https://stackoverflow.com/questions/605845/do-i-cast-the-res...
Re:The Ten Commandments for C Programmers (1987)
by throwphoton on Saturday May 23, 2020 @07:31PM
(#23287595)
Interesting. Not casting a void pointer return value seems like a bit of a shibboleth for the "C is not a subset of C++" community.
Re:The Ten Commandments for C Programmers (1987)
by enriquto on Sunday May 24, 2020 @10:26AM
(#23291742)
A "better" shibboleth is using "new" and "old" as identifiers. It serves as a good barrier to avoid accidental C++ compilation.
Re:The Ten Commandments for C Programmers (1987)
by glouwbug on Sunday May 24, 2020 @12:50AM
(#23289191)
Generic data structures work great if they use a void* since malloc returns a void*. Just malloc your structs, and suddenly a single set of 10 or so functions can work with all data types to build queues, lists, hash maps, etc
Re:The Ten Commandments for C Programmers (1987)
by _kst_ on Saturday May 23, 2020 @04:34PM
(#23286161)
You can compare it for (in)equality to another void pointer.
Re:The Ten Commandments for C Programmers (1987)
by microtherion on Saturday May 23, 2020 @01:35PM
(#23284800)
You can assign it to any data pointer variable, and you can printf("%p") it, for example.