printf格式字符串中的索引规范

3
在以下程序中,printf() 函数根据参数索引规范进行打印。
#include <stdio.h>

int main()
{
        printf("%3$d  %4$f  %2$d  %1$d\n", 1,  2,  3,  4.5);
}

输出:

3  4.500000  2  1

所以,我有一个问题,这是对于任何编译器都有效,还是仅支持GCC编译器?


1
https://dev59.com/kG015IYBdhLWcg3w6QA0 - BLUEPIXY
gcc编译器在自由环境中除了提供头文件外,不提供标准库。那么,你会使用哪个标准库的实现呢? - too honest for this site
“它对于任何编译器都有效吗?” 是的,正如您自己的编译所示-它对至少一个编译器有效。 “只支持GCC编译器吗?” 这是一个很广泛的问题。要回答是,需要调查许多编译器以找到另一个支持它的编译器。要回答否,可能需要调查所有编译器。 - chux - Reinstate Monica
在编译时,如果要查看是否为GCC扩展,请包含-pedantic选项。 - user3629249
1个回答

7
正如你所怀疑的,编号参数转换规范(即n$)不是C标准要求的。但它们并非Gnu实现特有的;它们是POSIX标准(规范在此处)所要求的,至少从1997年版本2开始就已经要求了。

大多数Unix和类Unix实现都具有一定程度的Posix兼容性,编号参数规范并非最近才添加的。因此,您可能会在大多数当前的Unix和类Unix平台上找到支持,包括使用Gnu标准C库(Linux)或FreeBSD标准C库(Mac OS X)的任何平台。但是,(本机)Windows C标准库(不符合Posix标准)仅在使用*printf_p函数族时提供对编号参数规范的支持。请参见此处此处


对于Windows,微软还引入了printf_p位置参数,以提供按数字指定要替换为格式字符串中字段的参数的能力。请参见printf_p Positional Parameters | Microsoft Docs - Yang Jk
@YangJk:好的,知道了,谢谢。 - rici

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接