1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#include "log_macros.h"
union Value {
int as_int;
char* as_string;
};
// A union object can contain only one of the fields --- not all.
// They share the same space.
enum ValueType {
TYPE_INT,
TYPE_STRING
};
// Almost equivalent to this:
typedef int ValueType; // makes an alias type called ValueType that is equivalent to int
ValueType TYPE_INT = 0;
ValueType TYPE_STRING = 1;
typedef struct _ValueWithType {
union Value value;
enum ValueType value_type;
} ValueWithType;
int main(int argc, char* argv[]) {
//union Value v = { .as_int = 5 };
//enum ValueType v_type = TYPE_INT;
ValueWithType v = { .value.as_int = 5, .v_type = TYPE_INT };
log_int( v.value.as_int );
v.value.as_int = 7;
log_int( v.value.as_int );
v.value.as_string = "apple";
v.value_type = TYPE_STRING;
log_str( v.value.as_string );
// log_int( v.as_int ); // BAD!!! The char* overwrote the int that was there before.
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2023 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.