PRINTF(1)

名称
printf - フォーマット済み出力

書式
printf format [arguments ...]

解説
printf は第一引数より後の引数をフォーマットに合わせて出力します。 format は 3 種類のオブジェクトを含む文字列です。 一つは通常の文字列で、単純に標準出力にコピーされます。 一つはエスケープシーケンスで、変換されてから標準出力にコピーされます。 もう一つはフォーマット記述で、これらはそれぞれ、後に続く arguments を表示します。

第一引数より後の arguments は対応するフォーマットが c か s の場合は文字列として扱われ、それ以外は以下のような拡張部分と 合わせて C の定数として評価されます。

•   先頭に ``+'' や ``-'' の符号をつけることができます。
•   もし先頭がシングルクォートやダブルクォートで始まっているか、数字、プラ ス/マイナス記号で始まっているのでなければ、その値は次の文字の ASCII コードになります。

フォーマット文字列は arguments を変換するために何度も 再利用されます。余分なフォーマット記述は 0 やヌル文字列に 評価されます。

キャラクタエスケープシーケンスは ANSI C 規格 X3J11 で立案された定義で、バックスラッシュによる表記です。文字キャラクタとそ の意味は以下のようになります。

\a  <ベル> キャラクタを書きます。

\b  <バックスペース> キャラクタを書きます。

\f  <フォームフィード> キャラクタを書きます。

\n  <改行> キャラクタを書きます。

\r  <復帰> キャラクタを書きます。

\t  <タブ> キャラクタを書きます。

\v  <垂直タブ> キャラクタを書きます。

\'  <シングルクォート> キャラクタを書きます。

\\  <バックスラッシュ>キャラクタを書きます。

\num
    1 から 3 桁の 8 進数 num で表される ASCII コードの 8 ビット文字を書きます。

各フォーマットの指定はパーセント文字(``%'')から始まります。 フォーマットの他の部分は、以下の順番で続きます:

以下のフラグが 0 個以上つきます:

    #   `#' キャラクタは数値を ``別形式'' で表示させるという指定です。 c, d, s フォーマットではこのオプションは無効です。 o フォーマットでは出力文字列の先頭に 0 をつけるため、 その値の精度が上がります。 x (X) フォーマットでは、0 以外の値なら出力される文字列の先頭に 0x (0X) がつきます。 e, E, f, g, G のフォーマットでは、たとえ小数点以下の値がなくても常に小数点がつきます (通常のフォーマットでは、小数点以下の値がある時のみ結果に小数点が含ま れます)。 g と G のフォーマットでは、結果の終わりに付く 0 は通常のフォーマットと違って 省略されません。

    -   指定したフィールド幅で 左詰め で出力します。

    +   符号つきのフォーマットの時に、数字の前に常に符号がつくように なります。

    ‘ ’ 符号つきのフォーマットで正の値を表示する時に先頭に空白が一つ挿入されま す。 `+' と空白の両方が指定された場合、`+' が空白に優先されます。

    0   `0' は空白でパディングする代りに `0' でパディングを行ないます。 `-' と `0' の両方が指定された場合、`-' が優先されます。

フィールド幅:
    field width; フィールド幅 を指定するためにオプションとしてつける数値です。 出力する文字列がこのフィールド幅よりも短い場合、フィールド幅を埋めるよ うに左側が(左詰めの指示があれば、右側が)空白でパディングされます。 (先頭につく 0 はフラグですが、埋め込まれた 0 はフィールド幅の一部であ ることに注意)

精度: オプションでつけるピリオド ‘’., には、 精度 を表わす数のオプションが続きます。この数は e と f フォーマットの場合に小数点以下の値を表示する桁数を指定し ます。 e, f 以外では、文字列から表示される文字の最大数になります。もし精度を表す数 がなければ、精度は 0 とされます。

Format:
    フォーマットの型を表す文字です( diouxXfwEgGbcs のうちのいずれか)。

フィールド幅や精度は数字の代りに ‘*’ も使えます。この場合、フィールド幅や精度は argument で与えます。

フォーマットキャラクタとその意味は以下のようになります:

diouXx
    argument はそれぞれ符号つき 10 進数(d または i)、符号なし 8 進数(o)、 符号なし 10 進数(u)、符号なし 16 進数(X または x)で表示されます。

f   argument が `[-]ddd.ddd' のスタイルで表示され、引数の精度で指定した数だけ小数 点以下の d が続きます。精度の指定がなければ 6 文字になります。もし精度 が明示的に 0 と指定された場合は小数点とそれ以下の値は表示されません。

eE  argument が [-]d.ddde\*(Pmdd のように、小数点の前に数字が一つで、後には引数の精度で指定した数だけ数 字が続きます。精度の指定がなければ 6 文字になります。 ‘E’ フォーマットが使われます。

gG  argument が、最小の長さで最大の精度が得られるように、 f または、 e (E) で表示されます。

c   argument の最初の文字が表示されます。

s   argument が終わりまでか、または精度で指定された文字数だけ表示されます。 精度が 0 かもしくは指定されていない場合は文字列全てが表示されます。

%   `%' を表示します。引数はつきません。

存在しないフィールド、もしくは小さなフィールド幅指定でフィールドが切り 詰められることはありません。指定されたフィールドが実際の幅を越えた時は、 パディングが起こります。

戻り値
printf は成功時には 0 を返し、失敗時には 1 を返します。

関連項目
printf(3)

歴史
printf は、 4.3BSD Reno で追加され、標準ライブラリ関数 printf(3) に基いています。

バグ
浮動小数点数は ASCII から浮動小数に変換されてまた戻るので、浮動小数の精度が失われます。

ANSI 16 進文字定数はわざと用意されていません。