#include struct A { void *a; long b; char c[128]; }; struct B { long a; void *b; }; enum C { a, b }; #define PRINT_TYPE(val) \ printf("typeof(" #val ") = %d, sizeof(" #val ") = %d\n", \ __builtin_classify_type(val), \ sizeof(val)) int main() { struct A a; struct B b; enum C c; int d; long e; char f; int *g; char *h; PRINT_TYPE(a); PRINT_TYPE(b); PRINT_TYPE(c); PRINT_TYPE(d); PRINT_TYPE(e); PRINT_TYPE(f); PRINT_TYPE(g); PRINT_TYPE(h); return 0; }