Всех приветствую!
Используемый язык - C.
wchar_t* w;
int* q;
printf("%s\n", TYPENAME(w));
printf("%s\n", TYPENAME(q));
вывод
wchar_t*
wchar_t*
Сам макрос
#define TYPENAME(x) \
_Generic( (x), \
size_t : "size_t", \
size_t* : "size_t*", \
wchar_t : "wchar_t", \
wchar_t* : "wchar_t*", \
default : TYPENAME1(x) \
)
#define TYPENAME1(x) \
_Generic( (x), \
_Bool : "_Bool", \
char : "char", \
signed char : "signed char", \
unsigned char : "unsigned char", \
short : "short", \
short* : "short*", \
int : "int", \
int* : "int*", \
long : "long", \
long* : "long*", \
long long : "long long", \
unsigned short : "unsigned short", \
unsigned int : "unsigned int", \
unsigned int* : "unsigned int*", \
unsigned long : "unsigned long", \
unsigned long long: "unsigned long long", \
float : "float", \
double : "double", \
long double : "long double", \
char* : "char*", \
char const* : "char const*", \
void* : "void*", \
void const* : "void const*", \
default : "unknown" \
)
Вопрос :как подправить макрос чтобы от отличал указанные выше типы?
Или это принципиально неразрешимая задача в языке C?
Благодарю заранее за ответы по существу.