0
在以下程序中,printf()
函数根据参数索引规范进行打印。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编译器?
在以下程序中,printf()
函数根据参数索引规范进行打印。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不需要编号参数转换规范(即n$
)。但它们对于Gnu的实现并不特别;他们是由POSIX standard(规格here)要求,并已至少自1997年第2版。
大多数Unix和类Unix实现功能符合POSIX的一些措施,并编号参数规格是不是最近才加入。因此,您可能会在大多数当前Unix和类Unix平台中找到支持,包括使用Gnu标准C库(Linux)或FreeBSD标准C库(Mac OS X)的任何平台。但是,(本地)Windows C标准库不符合POSIX标准,并且不包含对编号参数规范的支持(至少,截至今天:请参阅here。)
您是否阅读过我们宗教的伟大手册[ printf()'](https://linux.die.net/man/3/printf)? – Stargateur
我在[cplusplus.com](http://www.cplusplus.com/reference/cstdio/printf/)上看不到任何提及。这是关于C++的,更像维基,当然不是标准。我怀疑这是GCC的延伸。 – yeputons
https://stackoverflow.com/questions/6322540/how-do-positional-arguments-like-1-work-with-printf – BLUEPIXY