Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct my_fucking_datatype {
- int is_int;
- union {
- int int_val;
- float float_val;
- };
- } my_fucking_datatype_t;
- #define set_value(data, v) \
- do { \
- if (__builtin_types_compatible_p(typeof (v), int)) { \
- (data)->is_int = 1; \
- (data)->int_val = v; \
- } else if (__builtin_types_compatible_p(typeof (v), float)) { \
- (data)->is_int = 0; \
- (data)->float_val = v; \
- } else abort(); \
- } while(0)
- #define is_int(data) ((data)->is_int == 1)
- #define is_float(data) !is_int(data)
- int main(void)
- {
- my_fucking_datatype_t data;
- int sample_int_value = 5;
- float sample_float_value = 7.14;
- set_value(&data, sample_int_value);
- if (is_int(&data))
- printf("currently holds an int value\n");
- set_value(&data, sample_float_value);
- if (!is_int(&data))
- printf("currently holds a float value\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement