как я могу сделать это для переменной любого типа?
Чтобы переключать код на основе различных типов, используйте _Generic()
для выбора функций, специфичных для типа.
int log_int(int v) {
printf("(int %d)\n", v);
return !!v;
}
int log_double(double v) {
printf("(double %e)\n", v);
return !!v;
}
int log_char_ptr(char *v) {
printf("(str %s)\n", v);
return !!v;
}
#define mylog(X) _Generic((X), \
int: log_int, \
double: log_double, \
char *: log_char_ptr \
)(X)
Теперь коду нужно только позвонить mylog(various_types)
.
int main(void) {
int i = 3;
double d = 4.0;
char *s = "5";
mylog(i)==0||mylog(d)==0||mylog(s)==0;
return 0;
}
Выход
(int 3)
(double 4.000000e+00)
(str 5)