2017-06-14 11 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++とWikiによく似ていますが、もちろんThe Standardではありません。私はそれが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年版以降です。

ほとんどのUnixおよびUnixライクな実装では、Posix準拠の測定がいくつか行われています。したがって、Gnuの標準Cライブラリ(Linux)やFreeBSD標準Cライブラリ(Mac OS X)を使用しているUnixやUnixのようなプラットフォームでは、現在サポートされています。しかし、(ネイティブの)Windows C標準ライブラリはPosixに準拠しておらず、番号付き引数の指定はサポートされていません(少なくとも今日はhere参照)

関連する問題