如果我有像宏
#define MYMACRO(x) printf ("%any\n", x);
Run Code Online (Sandbox Code Playgroud)
是否有任何%any格式化程序可以打印任何内容,依赖于上下文?
非标准或GNU C特定都可以.
更新:重写以更多地关注宏观方面.
如果你将自己局限于一个参数,那么在C11中使用泛型是可行的.链接页面有一个例子,其要点是使用泛型将参数的类型映射到正确的格式化字符串.
我不想"重新打印"整篇博文,但宏开始了:
#define printf_dec_format(x) _Generic((x), \
char: "%c", \
signed char: "%hhd", \
unsigned char: "%hhu", \
/* more code deleted */
#define print(x) printf(printf_dec_format(x), x)
#define printnl(x) printf(printf_dec_format(x), x), printf("\n");
Run Code Online (Sandbox Code Playgroud)