#include <stdio.h>
struct Base {
int num;
#define DEFAULT_BASE() {.num =1}
};
struct DerivedA{
struct Base base;
int a;
#define DEFAULT_DERIVEDA() {DEFAULT_BASE() , .a = 2}
};
struct DerivedB{
struct Base base;
int b;
#define DEFAULT_DERIVEDB() {DEFAULT_BASE() , .b = 2}
};
struct DerivedA instA = DEFAULT_DERIVEDA();
struct DerivedB instB = { DEFAULT_BASE() , .b = 3 };
void func(struct Base * p){
p->num++;
}
int main() {
func(&instA);
func(&instB);
printf("A->num:%d , a:%d\nB->num:%d , b:%d" , instA.
base.
num , instA.
a , instB.
base.
num , instB.
b ); }
I2luY2x1ZGUgPHN0ZGlvLmg+CnN0cnVjdCBCYXNlIHsKICAgIGludCBudW07CiAgICAjZGVmaW5lIERFRkFVTFRfQkFTRSgpIHsubnVtID0xfQp9OwoKc3RydWN0IERlcml2ZWRBewogICAgc3RydWN0IEJhc2UgYmFzZTsKICAgIGludCBhOwogICAgI2RlZmluZSBERUZBVUxUX0RFUklWRURBKCkge0RFRkFVTFRfQkFTRSgpICwgLmEgPSAyfQp9OwoKc3RydWN0IERlcml2ZWRCewogICAgc3RydWN0IEJhc2UgYmFzZTsKICAgIGludCBiOwogICAgI2RlZmluZSBERUZBVUxUX0RFUklWRURCKCkge0RFRkFVTFRfQkFTRSgpICwgLmIgPSAyfQp9OwoKc3RydWN0IERlcml2ZWRBIGluc3RBID0gREVGQVVMVF9ERVJJVkVEQSgpOwpzdHJ1Y3QgRGVyaXZlZEIgaW5zdEIgPSB7IERFRkFVTFRfQkFTRSgpICwgLmIgPSAzIH07Cgp2b2lkIGZ1bmMoc3RydWN0IEJhc2UgKiBwKXsKICAgIHAtPm51bSsrOwp9CgppbnQgbWFpbigpIHsKICAgIGZ1bmMoJmluc3RBKTsKICAgIGZ1bmMoJmluc3RCKTsKCXByaW50ZigiQS0+bnVtOiVkICwgYTolZFxuQi0+bnVtOiVkICwgYjolZCIgLCBpbnN0QS5iYXNlLm51bSAsIGluc3RBLmEgLCBpbnN0Qi5iYXNlLm51bSAsIGluc3RCLmIgKTsKfQ==