3 ms·
Suppose I have the following struct and functions. struct my_struct{int a; char private[10];} void * get_struct_field_nonconst(struct my_struct *ptr) { r
by belgesel 5y ago
Suppose I have the following struct and functions.
struct my_struct{int a; char private[10];}
void * get_struct_field_nonconst(struct my_struct *ptr)
{ return &(ptr->private[0]); }
With these elements you are only allowed to give non-const pointers to read or write inside private field.
In order to truly apply this to const pointers (no casting etc.) you will need another get_struct_field() function but defined as this.
const void * get_struct_field_const(const struct my_struct *ptr)
{ return &(ptr->private[0]); }
This will work but it is ugly. Here _Generic keyword allows you to write these functions but use them with a common name. Such as get_struct_field(). And that would be something like this:
#define get_struct_field(ptr) \
_Generic((ptr), \
const struct my_struct * : get_struct_field_const, \
struct my_struct * : get_struct_field_nonconst) \
(ptr)
Hope this would help!
- an1sotropy 5y ago(slow answer) yes, thanks for the example!)