printf变量有通用的方法吗?

2 c macros printf

如果我有像宏

#define MYMACRO(x) printf ("%any\n", x);
Run Code Online (Sandbox Code Playgroud)

是否有任何%any格式化程序可以打印任何内容,依赖于上下文?

非标准或GNU C特定都可以.

unw*_*ind 5

更新:重写以更多地关注宏观方面.

如果你将自己局限于一个参数,那么在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)

  • 你可以用C11的`_Generic`功能拼凑一些东西,但它会很难看. (2认同)
  • "*......在C99中可行......*"错误......你很可能想说"*......在C11*"? (2认同)