2017-06-14 45 views
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编译器?

+0

您是否阅读过我们宗教的伟大手册[ printf()'](https://linux.die.net/man/3/printf)? – Stargateur

+0

我在[cplusplus.com](http://www.cplusplus.com/reference/cstdio/printf/)上看不到任何提及。这是关于C++的,更像维基,当然不是标准。我怀疑这是GCC的延伸。 – yeputons

+1

https://stackoverflow.com/questions/6322540/how-do-positional-arguments-like-1-work-with-printf – BLUEPIXY

回答

4

正如您怀疑的那样,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。)