2017-06-14 81 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。)