Czy istnieje sposób przekonwertować GCC typeof
rozszerzenie na sznurku, na przykład:Konwersja typeof ciąg
#define printType(a) printf("%s", #typeof(a))
Więc co mogę zrobić:
int a = 4;
printf("Type of a is: ");
printType(a);
i uzyskać wyjście:
Type of a is: int
możliwe zastosowanie to będzie w następujący sposób:
#include <stdio.h>
#define indirect_print(a) print_##typeof(a)(a)
void print_int(int *i) {
printf("%d", *i);
}
void print_char(char *c) {
printf("%c", *c);
}
int main(void) {
char C = 'C';
int I = 100;
{
char *a = &C;
indirect_print(a);
}
{
int *a = &I;
indirect_print(a);
}
return 0;
}
Jeśli to możliwe, powinien działać dla wszystkich typów, w tym struktur i związków, bez polegania na ręcznym dodawaniu każdego typu do listy.
Można spróbować użyć typu-generic makro? –
Dlaczego chcesz to zrobić? –