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