#include <stdio.h>
#include <stddef.h>
typedef struct Node {
int a;
int b;
int c;
} Node;
#define SET_MEMBER(obj, member_name, value)\
set_member(value, (void*)((char *)obj + offsetof(Node, member_name)))\
/**/
void set_member(int value, int *pointer){//or use memcpy
*pointer = value;
}
static inline void print_Node(Node *node);
int main(void){
Node mynode = {.a = 0, .b = 45, .c = 64};
print_Node(&mynode);
SET_MEMBER(&mynode, a, 1);
print_Node(&mynode);
}
static inline void print_Node(Node *node){
printf("{ a:%d, b:%d, c:%d }\n", node
->a
, node
->b
, node
->c
); }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRkZWYuaD4KCnR5cGVkZWYgc3RydWN0IE5vZGUgewoJaW50IGE7CglpbnQgYjsKCWludCBjOwp9IE5vZGU7CgojZGVmaW5lIFNFVF9NRU1CRVIob2JqLCBtZW1iZXJfbmFtZSwgdmFsdWUpXAoJc2V0X21lbWJlcih2YWx1ZSwgKHZvaWQqKSgoY2hhciAqKW9iaiArIG9mZnNldG9mKE5vZGUsIG1lbWJlcl9uYW1lKSkpXAovKiovCgp2b2lkIHNldF9tZW1iZXIoaW50IHZhbHVlLCBpbnQgKnBvaW50ZXIpey8vb3IgdXNlIG1lbWNweQoJKnBvaW50ZXIgPSB2YWx1ZTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHByaW50X05vZGUoTm9kZSAqbm9kZSk7CgppbnQgbWFpbih2b2lkKXsKCU5vZGUgbXlub2RlID0gey5hID0gMCwgLmIgPSA0NSwgLmMgPSA2NH07CgoJcHJpbnRfTm9kZSgmbXlub2RlKTsKCVNFVF9NRU1CRVIoJm15bm9kZSwgYSwgMSk7CglwcmludF9Ob2RlKCZteW5vZGUpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfTm9kZShOb2RlICpub2RlKXsKCXByaW50ZigieyBhOiVkLCBiOiVkLCBjOiVkIH1cbiIsIG5vZGUtPmEsIG5vZGUtPmIsIG5vZGUtPmMpOwp9Cg==