#include <stdio.h>
typedef struct
{
int varA;
char varB;
} A;
typedef struct
{
int varA;
int varB;
int varC;
} B;
typedef struct
{
int varA;
short varB;
} C;
typedef enum { structA, structB, structC } STRUCT_ENUM;
int returnSize(STRUCT_ENUM structType)
{
int retVal = 0;
switch(structType)
{
case structA:
retVal = sizeof(A);
break;
case structB:
retVal = sizeof(B);
break;
case structC:
retVal = sizeof(C);
break;
default:
break;
}
return retVal;
}
void printStructName(STRUCT_ENUM structType)
{
switch(structType)
{
case structA:
break;
case structB:
break;
case structC:
break;
default:
break;
}
}
void createDataString(STRUCT_ENUM structType, char* output, unsigned char* input)
{
switch(structType)
{
case structA:
{
A a = *(A*)input;
sprintf(output
, "data: %d, %d", a.
varA, a.
varB); break;
}
case structB:
{
B b = *(B*)input;
sprintf(output
, "data: %d, %d, %d", b.
varA, b.
varB, b.
varC); break;
}
case structC:
{
C c = *(C*)input;
sprintf(output
, "data: %d, %d", c.
varA, c.
varB); break;
}
default:
break;
}
}
int main(void) {
char foobar[50];
printf("Return size: %d\r\n", returnSize
(structA
)); printStructName(structB);
C c = { 10, 20 };
createDataString(structC, foobar, (unsigned char*) &c);
printf("Data string: %s\r\n", foobar
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgdmFyQTsKICAgIGNoYXIgdmFyQjsKfSBBOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgIGludCB2YXJBOwogICAgIGludCB2YXJCOwogICAgIGludCB2YXJDOwp9IEI7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICAgaW50IHZhckE7CiAgICAgc2hvcnQgdmFyQjsKfSBDOwoKdHlwZWRlZiBlbnVtIHsgc3RydWN0QSwgc3RydWN0Qiwgc3RydWN0QyB9IFNUUlVDVF9FTlVNOwoKaW50IHJldHVyblNpemUoU1RSVUNUX0VOVU0gc3RydWN0VHlwZSkKewogICAgIGludCByZXRWYWwgPSAwOwogICAgIHN3aXRjaChzdHJ1Y3RUeXBlKQogICAgIHsKICAgICAgICAgIGNhc2Ugc3RydWN0QToKICAgICAgICAgICAgICAgcmV0VmFsID0gc2l6ZW9mKEEpOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2Ugc3RydWN0QjoKICAgICAgICAgICAgICAgcmV0VmFsID0gc2l6ZW9mKEIpOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2Ugc3RydWN0QzoKICAgICAgICAgICAgICAgcmV0VmFsID0gc2l6ZW9mKEMpOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICByZXR1cm4gcmV0VmFsOwp9Cgp2b2lkIHByaW50U3RydWN0TmFtZShTVFJVQ1RfRU5VTSBzdHJ1Y3RUeXBlKQp7CiAgICAgc3dpdGNoKHN0cnVjdFR5cGUpCiAgICAgewogICAgICAgICAgY2FzZSBzdHJ1Y3RBOgogICAgICAgICAgICAgICBwcmludGYoIlN0cnVjdDogQVxyXG4iKTsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIHN0cnVjdEI6CiAgICAgICAgICAgICAgIHByaW50ZigiU3RydWN0OiBCXHJcbiIpOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2Ugc3RydWN0QzoKICAgICAgICAgICAgICAgcHJpbnRmKCJTdHJ1Y3Q6IENcclxuIik7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgIH0KfQoKdm9pZCBjcmVhdGVEYXRhU3RyaW5nKFNUUlVDVF9FTlVNIHN0cnVjdFR5cGUsIGNoYXIqIG91dHB1dCwgdW5zaWduZWQgY2hhciogaW5wdXQpCnsKICAgICBzd2l0Y2goc3RydWN0VHlwZSkKICAgICB7CiAgICAgICAgICBjYXNlIHN0cnVjdEE6CiAgICAgICAgICB7CiAgICAgICAgICAJICAgQSBhID0gKihBKilpbnB1dDsKICAgICAgICAgICAgICAgc3ByaW50ZihvdXRwdXQsICJkYXRhOiAlZCwgJWQiLCBhLnZhckEsIGEudmFyQik7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBzdHJ1Y3RCOgogICAgICAgICAgewogICAgICAgICAgICAgICBCIGIgPSAqKEIqKWlucHV0OwogICAgICAgICAgICAgICBzcHJpbnRmKG91dHB1dCwgImRhdGE6ICVkLCAlZCwgJWQiLCBiLnZhckEsIGIudmFyQiwgYi52YXJDKTsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIHN0cnVjdEM6CiAgICAgICAgICB7CiAgICAgICAgICAgICAgIEMgYyA9ICooQyopaW5wdXQ7CiAgICAgICAgICAgICAgIHNwcmludGYob3V0cHV0LCAiZGF0YTogJWQsICVkIiwgYy52YXJBLCBjLnZhckIpOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICB9Cn0KCmludCBtYWluKHZvaWQpIHsKCWNoYXIgZm9vYmFyWzUwXTsKCQoJcHJpbnRmKCJSZXR1cm4gc2l6ZTogJWRcclxuIiwgcmV0dXJuU2l6ZShzdHJ1Y3RBKSk7CglwcmludFN0cnVjdE5hbWUoc3RydWN0Qik7CgkKCUMgYyA9IHsgMTAsIDIwIH07CgljcmVhdGVEYXRhU3RyaW5nKHN0cnVjdEMsIGZvb2JhciwgKHVuc2lnbmVkIGNoYXIqKSAmYyk7CglwcmludGYoIkRhdGEgc3RyaW5nOiAlc1xyXG4iLCBmb29iYXIpOwoJCglyZXR1cm4gMDsKfQo=