6 ms·
Casting to a pointer of incompatible type is UB. The exception is casting to char*.
by tomp 4mo ago
Casting to a pointer of incompatible type is UB. The exception is casting to char*.
- amiga386 4mo agoTell me why struct* is incompatible with void* when it's such a standard case in C that you don't need a cast: struct foo *x = malloc(sizeof(struct foo)); /* malloc returns void* */ Or rather, tell me why the C11 standards committee decided to declare that struct* is incompatible with a void*
- tomp 4mo agook so Claude says I was wrong, it's more subtle. (1) you can cast between any pointer types (no UB - assuming they're aligned), but accessing memory through a wrongly-typed pointer is UB (2) the only exception is char*, which allows you a "byte view of memory" (3) calling a function through a pointer requires the parameter pointer types to be compatible, and none of these are: int*, struct foo *, void*, char*