#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct my_type_struct my_type;
void constructor1 ( my_type * object, uint16_t arg1 );
void constructor2 ( my_type * object, uint16_t arg1, uint16_t arg2 );
void constructor3 ( my_type * object, const void * const array_arg1,
uint16_t arg2, uint16_t arg3 );
#define GET_CONTRUCTOR_OVERLOAD(_1, _2, _3, _4, NAME, ...) NAME
#define INIT_OBJECT(...) GET_CONTRUCTOR_OVERLOAD(__VA_ARGS__, \
constructor3, constructor2, constructor1)(__VA_ARGS__)
#define CONSTRUCTOR(name, ...) my_type name; INIT_OBJECT(&name, __VA_ARGS__)
struct my_type_struct
{
int field;
};
int main ( int argc, char* argv[] )
{
uint16_t n = 13;
uint16_t m = 14;
int c[30];
CONSTRUCTOR ( obj, c, n, m );//invokes constructor1
//system ( "pause" );
}
void constructor1 ( my_type * object, uint16_t arg1 )
{
object->field = 1;
}
void constructor2 ( my_type * object, uint16_t arg1, uint16_t arg2 )
{
object->field = 2;
}
void constructor3 ( my_type * object, const void * const array_arg1,
uint16_t arg2, uint16_t arg3 )
{
object->field = 3;
}
I2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKdHlwZWRlZiBzdHJ1Y3QgbXlfdHlwZV9zdHJ1Y3QgbXlfdHlwZTsKCnZvaWQgY29uc3RydWN0b3IxICggbXlfdHlwZSAqIG9iamVjdCwgdWludDE2X3QgYXJnMSApOwp2b2lkIGNvbnN0cnVjdG9yMiAoIG15X3R5cGUgKiBvYmplY3QsIHVpbnQxNl90IGFyZzEsIHVpbnQxNl90IGFyZzIgKTsKdm9pZCBjb25zdHJ1Y3RvcjMgKCBteV90eXBlICogb2JqZWN0LCBjb25zdCB2b2lkICogY29uc3QgYXJyYXlfYXJnMSwKCQkJCQl1aW50MTZfdCBhcmcyLCB1aW50MTZfdCBhcmczICk7CgojZGVmaW5lIEdFVF9DT05UUlVDVE9SX09WRVJMT0FEKF8xLCBfMiwgXzMsIF80LCBOQU1FLCAuLi4pIE5BTUUKI2RlZmluZSBJTklUX09CSkVDVCguLi4pIEdFVF9DT05UUlVDVE9SX09WRVJMT0FEKF9fVkFfQVJHU19fLCBcCiAgICBjb25zdHJ1Y3RvcjMsIGNvbnN0cnVjdG9yMiwgY29uc3RydWN0b3IxKShfX1ZBX0FSR1NfXykKI2RlZmluZSBDT05TVFJVQ1RPUihuYW1lLCAuLi4pIG15X3R5cGUgbmFtZTsgSU5JVF9PQkpFQ1QoJm5hbWUsIF9fVkFfQVJHU19fKQoKc3RydWN0IG15X3R5cGVfc3RydWN0CnsKCWludCBmaWVsZDsKfTsKCmludCBtYWluICggaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSApCnsKCXVpbnQxNl90IG4gPSAxMzsKCXVpbnQxNl90IG0gPSAxNDsKCWludCBjWzMwXTsKCUNPTlNUUlVDVE9SICggb2JqLCBjLCBuLCBtICk7Ly9pbnZva2VzIGNvbnN0cnVjdG9yMQoJLy9zeXN0ZW0gKCAicGF1c2UiICk7Cn0KCnZvaWQgY29uc3RydWN0b3IxICggbXlfdHlwZSAqIG9iamVjdCwgdWludDE2X3QgYXJnMSApCnsKCXByaW50ZiAoICIlc1xuIiwgX19mdW5jX18gKTsKCW9iamVjdC0+ZmllbGQgPSAxOwp9CnZvaWQgY29uc3RydWN0b3IyICggbXlfdHlwZSAqIG9iamVjdCwgdWludDE2X3QgYXJnMSwgdWludDE2X3QgYXJnMiApCnsKCXByaW50ZiAoICIlc1xuIiwgX19mdW5jX18gKTsKCW9iamVjdC0+ZmllbGQgPSAyOwp9CnZvaWQgY29uc3RydWN0b3IzICggbXlfdHlwZSAqIG9iamVjdCwgY29uc3Qgdm9pZCAqIGNvbnN0IGFycmF5X2FyZzEsCgkJCQkJdWludDE2X3QgYXJnMiwgdWludDE2X3QgYXJnMyApCnsKCXByaW50ZiAoICIlc1xuIiwgX19mdW5jX18gKTsKCW9iamVjdC0+ZmllbGQgPSAzOwp9