it's void* because that can be assigned between other pointer types without a cast. x = malloc(sizeof(*x)); instead of x = (T*)malloc(sizeof(*x)); which just adds clutter. Similarly it's just free(x) instead of free((void*)x); (or free((uchar*)x) as I understand your suggestion). On Sun, 15 May 2022 at 11:59, adr wrote: > Hi, > one of the first thing I noticed compiling in plan9 is that arithmetic > on void* is illegal. Other compilers treat void* as uchar*. > Conceptually, it makes sense. A pointer to void doesn't point to > any object. But then I've seen the use of void* in functions (like > memccpy) when the pointed object is going to be processed as a > byte array. Local uchar*'s are used to do the trick inside the > function. > > It wouldn't make more sense to avoid the use of void* > and just use instead uchar* or better still u8int*? > > Some thoughts? > > Regards, > adr. ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/Tecaea3b9ec8e7066-M057b5e29e604b46338b87e89 Delivery options: https://9fans.topicbox.com/groups/9fans/subscription