#pragma once #define typename(x) _Generic((x), \ void *: "pointer to void", \ \ _Bool: "_Bool", \ \ char *: "pointer to char", \ char: "char", \ signed char: "signed char", \ unsigned char: "unsigned char", \ \ int *: "pointer to int", \ int: "int", \ long int: "long int", \ long long int: "long long int", \ short int: "short int", \ unsigned int: "unsigned int", \ unsigned long int: "unsigned long int", \ unsigned long long int: "unsigned long long int", \ unsigned short int: "unsigned short int", \ \ float: "float", \ \ double: "double", \ long double: "long double", \ \ default: "other") void check_type_test();