From 973e27b243ea7f12b6743894465c67a4a6a87eb2 Mon Sep 17 00:00:00 2001 From: Carlos Maiolino Date: Sat, 6 Sep 2025 09:26:21 +0200 Subject: Move some other code here Signed-off-by: Carlos Maiolino --- C/HF/chap5/data.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 C/HF/chap5/data.c (limited to 'C/HF/chap5') diff --git a/C/HF/chap5/data.c b/C/HF/chap5/data.c new file mode 100644 index 0000000..4034480 --- /dev/null +++ b/C/HF/chap5/data.c @@ -0,0 +1,46 @@ +#include + +enum q { + COUNT, + WEIGHT, + VOLUME, +}; + +/* Using anonymous data structures is awesome */ +struct item { + char *desc; + union { + long int count; + float weight; + float volume; + }; + enum q type; +}__attribute((packed))__; + +int main(void) { + + struct item fruit = + { + .desc = "apple", + }; + + fruit.type = WEIGHT; + + if (fruit.type == COUNT) { + fruit.weight = 3.87; + printf("Fruit = %s is %ld\n", fruit.desc, fruit.count); + } + if (fruit.type == WEIGHT) { + fruit.weight = 69.5; + printf("Fruit = %s is %2.2f\n", fruit.desc, fruit.weight); + } + if (fruit.type == VOLUME) { + fruit.volume = 63.5; + printf("Fruit = %s is %2.2f\n", fruit.desc, fruit.volume); + } + + printf("struct item: %lu - count: %lu - weight: %lu - volume: %lu - type: %lu\n", + sizeof(struct item), sizeof(fruit.count), sizeof(fruit.weight), + sizeof(fruit.volume), sizeof(fruit.type)); + return 0; +} -- cgit v1.2.3