printf 格式说明符中的索引说明
Index specification in printf format specifier
在下面的程序中,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 编译器?
如您所料,C standard. But they are not idiosyncratic to the Gnu implementation; they are required by the POSIX standard (specification here 不需要编号参数转换规范(即 n$
),并且至少从 1997 版本 2 开始就是这样。
大多数 Unix 和类 unix 实现都具有一定程度的 Posix 合规性,编号参数规范并不是最近才添加的。因此,您可能会在大多数当前的 Unix 和类 Unix 平台中找到支持,包括任何使用 Gnu 标准 C 库(Linux)或 FreeBSD 标准 C 库(Mac OS X ).但是,如果您使用 *printf_p
系列函数,(本机)Windows C 标准库(不符合 Posix)仅提供对编号参数规范的支持。参见 here and here。)
在下面的程序中,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 编译器?
如您所料,C standard. But they are not idiosyncratic to the Gnu implementation; they are required by the POSIX standard (specification here 不需要编号参数转换规范(即 n$
),并且至少从 1997 版本 2 开始就是这样。
大多数 Unix 和类 unix 实现都具有一定程度的 Posix 合规性,编号参数规范并不是最近才添加的。因此,您可能会在大多数当前的 Unix 和类 Unix 平台中找到支持,包括任何使用 Gnu 标准 C 库(Linux)或 FreeBSD 标准 C 库(Mac OS X ).但是,如果您使用 *printf_p
系列函数,(本机)Windows C 标准库(不符合 Posix)仅提供对编号参数规范的支持。参见 here and here。)