Advertisement
Guest User

my_fucking_datatype

a guest
Jun 24th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct my_fucking_datatype {
  5.         int is_int;
  6.         union  {
  7.                 int int_val;
  8.                 float float_val;
  9.         };
  10. } my_fucking_datatype_t;
  11.  
  12. #define set_value(data, v)              \
  13. do {                                    \
  14.         if (__builtin_types_compatible_p(typeof (v), int)) { \
  15.                 (data)->is_int = 1;                          \
  16.                 (data)->int_val = v;                         \
  17.         } else if (__builtin_types_compatible_p(typeof (v), float)) { \
  18.                 (data)->is_int = 0;                          \
  19.                 (data)->float_val = v;                       \
  20.         } else abort();                                       \
  21. } while(0)
  22.  
  23. #define is_int(data) ((data)->is_int == 1)
  24. #define is_float(data)  !is_int(data)
  25.  
  26. int main(void)
  27. {
  28.         my_fucking_datatype_t data;
  29.         int sample_int_value = 5;
  30.         float sample_float_value = 7.14;
  31.  
  32.         set_value(&data, sample_int_value);
  33.         if (is_int(&data))
  34.                 printf("currently holds an int value\n");
  35.  
  36.         set_value(&data, sample_float_value);
  37.         if (!is_int(&data))
  38.                 printf("currently holds a float value\n");
  39.  
  40.  
  41.         return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement