diff --git a/ex35/Makefile b/ex35/Makefile new file mode 100644 index 0000000..fff501e --- /dev/null +++ b/ex35/Makefile @@ -0,0 +1,4 @@ +CFLAGS=-Wall -g + +clean: + rm -f ex35 diff --git a/ex35/ex35 b/ex35/ex35 new file mode 100755 index 0000000..60679d5 Binary files /dev/null and b/ex35/ex35 differ diff --git a/ex35/ex35.c b/ex35/ex35.c index 676616e..e02c9b3 100644 --- a/ex35/ex35.c +++ b/ex35/ex35.c @@ -17,4 +17,42 @@ struct Variant { typedef struct Variant Variant; +void Variant_print(Variant *var) +{ + switch (var -> type) + { + case TYPE_INT: + printf("INT: %d\n", var -> data.as_integer); + break; + case TYPE_FLOAT: + printf("FLOAT: %f\n", var -> data.as_float); + break; + case TYPE_STRING: + printf("STRING: %s\n", var -> data.as_string); + break; + default: + printf("UNKNOWN TYPE: %d", var -> type); + } +} +int main (int argc, char *argv[]) +{ + Variant a_int = {.type = TYPE_INT, .data.as_integer = 100}; + Variant a_float = {.type = TYPE_FLOAT, .data.as_float = 100.34}; + Variant a_string = {.type = TYPE_STRING, .data.as_string = "YO DUDE!"}; + + Variant_print(&a_int); + Variant_print(&a_float); + Variant_print(&a_string); + + // here's how you access them + a_int.data.as_integer = 200; + a_float.data.as_float = 2.345; + a_string.data.as_string = "Hi there."; + + Variant_print(&a_int); + Variant_print(&a_float); + Variant_print(&a_string); + + return 0; +}