1 #ifndef PRINT_H 2 #define PRINT_H 3 4 #ifdef HAS_GENERIC 5 6 int print_uchar(unsigned char v); 7 8 int print_char(char v); 9 10 int print_short(short v); 11 12 int print_ushort(unsigned short v); 13 14 int print_int(int v); 15 16 int print_uint(unsigned v); 17 18 int print_long(long v); 19 20 int print_ulong(unsigned long v); 21 22 int print_long_long(long long v); 23 24 int print_ulong_long(unsigned long long v); 25 26 int print_float(float v); 27 28 int print_double(double v); 29 30 int print_long_double(long double v); 31 32 int print_string(char *s); 33 34 int print_pointer(void *v); 35 36 int print_unknown(); 37 38 #define print(x) \ 39 _Generic((x), \ 40 unsigned char: print_uchar, \ 41 char: print_char, \ 42 short int: print_short, \ 43 unsigned short int: print_ushort, \ 44 int: print_int, \ 45 unsigned int: print_uint, \ 46 long int: print_long, \ 47 unsigned long int: print_ulong, \ 48 long long int: print_long_long, \ 49 unsigned long long int: print_ulong_long, \ 50 float: print_float, \ 51 double: print_double, \ 52 long double: print_long_double, \ 53 char *: print_string, \ 54 void *: print_pointer, \ 55 default : print_unknown)(x) 56 57 #else 58 #define print(...) printf("Omitted, the compiler does not support C11 generics.\n") 59 #endif 60 61 #endif 62