modernc.org/ccgo/v3@v3.16.14/lib/testdata/tcc-0.9.27/tests/tests2/94_generic.c (about) 1 #include <stdio.h> 2 3 const int a = 0; 4 5 struct a { 6 int a; 7 }; 8 9 struct b { 10 int a; 11 }; 12 13 int a_f() 14 { 15 return 20; 16 } 17 18 int b_f() 19 { 20 return 10; 21 } 22 23 typedef int int_type1; 24 25 #define gen_sw(a) _Generic(a, const char *: 1, default: 8, int: 123); 26 27 int main() 28 { 29 int i = 0; 30 signed long int l = 2; 31 struct b titi; 32 const int * const ptr; 33 const char *ti; 34 int_type1 i2; 35 36 i = _Generic(a, int: a_f, const int: b_f)(); 37 printf("%d\n", i); 38 i = _Generic(a, int: a_f() / 2, const int: b_f() / 2); 39 printf("%d\n", i); 40 i = _Generic(ptr, int *:1, int * const:2, default:20); 41 printf("%d\n", i); 42 i = gen_sw(a); 43 printf("%d\n", i); 44 i = _Generic(titi, struct a:1, struct b:2, default:20); 45 printf("%d\n", i); 46 i = _Generic(i2, char: 1, int : 0); 47 printf("%d\n", i); 48 i = _Generic(a, char:1, int[4]:2, default:5); 49 printf("%d\n", i); 50 i = _Generic(17, int :1, int **:2); 51 printf("%d\n", i); 52 i = _Generic(17L, int :1, long :2, long long : 3); 53 printf("%d\n", i); 54 i = _Generic("17, io", char *: 3, const char *: 1); 55 printf("%d\n", i); 56 i = _Generic(ti, const unsigned char *:1, const char *:4, char *:3, 57 const signed char *:2); 58 printf("%d\n", i); 59 printf("%s\n", _Generic(i + 2L, long: "long", int: "int", 60 long long: "long long")); 61 i = _Generic(l, long: 1, int: 2); 62 printf("%d\n", i); 63 return 0; 64 }