C 将转换说明符作为参数传递给printf()

C 将转换说明符作为参数传递给printf(),c,formatting,printf,C,Formatting,Printf,在C语言中有没有一种方法可以传递一个我们想用作转换说明符的参数?举个小例子: 想象一下,我用/foo[-x] 如果-x不存在,我希望它以十进制打印一些值。但是如果存在-x,我希望它以十六进制打印该值 是否有方法将要用作转换说明符的字符串作为参数传递给printf(),在本例中为“x”或“%s” -- 注意:它不像 char *format = "%s"; printf(format, "a string"); 虽然*printf()函数家族确实提供了将字段宽度作为参数传递的方法,但实际的转换说

在C语言中有没有一种方法可以传递一个我们想用作转换说明符的参数?举个小例子:

想象一下,我用
/foo[-x]

如果
-x
不存在,我希望它以十进制打印一些值。但是如果存在
-x
,我希望它以十六进制打印该值

是否有方法将要用作转换说明符的字符串作为参数传递给
printf()
,在本例中为
“x”
“%s”

--

注意:它不像

char *format = "%s";
printf(format, "a string");

虽然*printf()函数家族确实提供了将字段宽度作为参数传递的方法,但实际的转换说明符本身必须以格式字符串的形式提供。因此,如果您的程序需要在
printf(“%#X”,integer)
printf(“%d”,integer)
之间进行选择,您要么必须以编程方式生成格式字符串(与您在问题末尾明确拒绝的方式非常类似),要么需要对
printf()进行两次不同的调用
使用条件代码在它们之间进行选择。另一方面,只要所有可能的不同输出格式使用相同数量的参数,以编程方式生成格式字符串对我来说似乎并不十分繁重此处使用
@
表示将转换说明符指定为单独的参数,则答案为“否”。您必须创建适当的格式字符串:
printf((xflag?%.8lX):“%.8ld”),3141592L)
,您的“它不是类似的东西”评论表示您不想这样做,但我在这里的评论说“您必须这样做,或者使用您自己设计的东西,而不是
printf()
函数系列”。@JonathanLeffler感谢您的回复。我只是好奇printf()是否具有这种功能;)谢谢你的回复。我只是好奇printf()是否具有这种功能;)如果这个答案对你有用,请考虑接受它。(见附件)