#include <stdio.h>
#include <stdlib.h>
struct point1d {
int x;
void (*print)(void const *);
};
struct point2d {
int x, y;
void (*print)(void const *);
};
void print_point1d( void const * p ) {
printf( "(%d)\n", ((struct point1d
const*)p
)->x
); }
void print_point2d( void const * p ) {
printf( "(%d, %d)\n", ((struct point2d
const*)p
)->x
, ((struct point2d const*)p)->y );
}
int main() {
struct point1d p1 = { .x=1, .print=&print_point1d };
struct point2d p2 = { .x=3, .y=4, .print=&print_point2d };
p1.print( &p1 );
p2.print( &p2 );
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIApzdHJ1Y3QgcG9pbnQxZCB7CiAgICBpbnQgeDsgCiAgICB2b2lkICgqcHJpbnQpKHZvaWQgY29uc3QgKik7Cn07CiAKc3RydWN0IHBvaW50MmQgewogICAgaW50IHgsIHk7CiAgICB2b2lkICgqcHJpbnQpKHZvaWQgY29uc3QgKik7ICAgICAKfTsKIAp2b2lkIHByaW50X3BvaW50MWQoIHZvaWQgY29uc3QgKiBwICkgewogICAgcHJpbnRmKCAiKCVkKVxuIiwgKChzdHJ1Y3QgcG9pbnQxZCBjb25zdCopcCktPnggKTsKfQogCnZvaWQgcHJpbnRfcG9pbnQyZCggdm9pZCBjb25zdCAqIHAgKSB7CiAgICBwcmludGYoICIoJWQsICVkKVxuIiwgKChzdHJ1Y3QgcG9pbnQyZCBjb25zdCopcCktPngsIAogICAgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHBvaW50MmQgY29uc3QqKXApLT55ICk7Cn0KIAppbnQgbWFpbigpIHsKICAgIHN0cnVjdCBwb2ludDFkIHAxID0geyAueD0xLCAucHJpbnQ9JnByaW50X3BvaW50MWQgfTsKICAgIHN0cnVjdCBwb2ludDJkIHAyID0geyAueD0zLCAueT00LCAucHJpbnQ9JnByaW50X3BvaW50MmQgfTsKICAgIAogICAgcDEucHJpbnQoICZwMSApOwogICAgcDIucHJpbnQoICZwMiApOwp9