我想打印变量值而不指定其类型.
在c中,我可以做到
int main(int argc, char **argv) {
int i = 1;
float f = 0.1;
char s[] = "s";
printf("%i\n", i);
printf("%f\n", f);
printf("%s", s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我希望:
int main(int argc, char **argv) {
int i = 1;
float f = 0.1;
char s[] = "s";
printf("%any_type\n", i);
printf("%any_type\n", f);
printf("%any_type", s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题:有没有%any_type用C?
Gya*_*ain 12
在C11你可以写一个通用的功能打印任何类型和不断增加你的自定义类型,该功能.
#define print_any(X) _Generic((X), int: print_int, \
default: print_unknown, \
float: print_float)(X)
int print_int(int i)
{
return printf("%d\n", i);
}
int print_float(float f)
{
return printf("%f\n", f);
}
int print_unknown(...)
{
return printf("ERROR: Unknown type\n");
}
Run Code Online (Sandbox Code Playgroud)
您还可以自动生成函数,如下所示.
#define GEN_PRINT(TYPE, SPECIFIER_STR) int print_##TYPE(TYPE x) { return printf(SPECIFIER_STR "\n", x);}
GEN_PRINT(int, "%d");
GEN_PRINT(char, "%c");
GEN_PRINT(float, "%f");
Run Code Online (Sandbox Code Playgroud)
用法是:
int main(int argc, char **argv) {
int i = 1;
float f = 0.1;
char s[] = "s";
print_any(i);
print_any(f);
print_any(s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)