#include <stdio.h>
typedef enum tu_foo_type_enum tu_foo_type;
typedef struct tu_foo_struct tu_foo;
enum tu_foo_type_enum {
TU_FOO_INT,
TU_FOO_STR
};
struct tu_foo_struct {
tu_foo_type type;
union {
int i;
char* str;
};
};
void print_tu_foo(tu_foo tf) {
switch (tf.type) {
case TU_FOO_INT:
printf("%d\n", tf.i);
break;
case TU_FOO_STR:
puts(tf.str);
break;
}
}
int main(void) {
tu_foo a;
tu_foo b;
a.type = TU_FOO_INT;
a.i = 100;
b.type = TU_FOO_STR;
b.str = "asdf";
print_tu_foo(a); // 100 출력
print_tu_foo(b); // asdf 출력
return 0;
}
type과 union을 struct로 묶으면 되는데,
type에 많은 정보가 필요없을 경우 uint8_t 같은 작은 자료형을 사용해도 될 것이다.