|
|
A.2 printf の書式
stdio.h に含まれる *printf 関数の書式も C99 では拡張されています(赤字部分)。従来のものと拡張されたものを含めた全てを以下に示します。
A.2.1 書式
printf の書式は、以下のとおりです。ここで、'()'はグループ化を、'?' は直前を修飾し省略可能を、'*' は直前を修飾し0回以上の繰り返しを、'[]'は、[]でくるまれた文字の中から任意の一文字を表します。
[%](フラグ)*(最小領域幅)?([.](精度)?)?(長さ修飾子)?(変換指定子)
A.2.2 フラグ (flags)
フラグ | 説明 |
- | 変換結果は通常右詰にされますが、これを指定すると左詰にします。 |
+ | 変換対象が数値の場合、変換結果に必ず符号をつけます |
' ' | 変換対象が数値の場合で、変換結果に符号が出力されない場合、' ' が代わりとして出力されます。フラグ '+' と ' ' が同時に指定された場合、'+' が優先されます。 |
# | 代替形式で表示します。
変換指定子 | 説明 |
o | 値が 0 以外の場合、'0' を先頭に付加します。 |
xX | 値が 0 以外の場合、'0x' または '0X' を先頭に付加します。 |
aAeEfF | 必ず小数点をつけます |
gG | 必ず小数点をつけます。後続する 0 も省略せずに付加します。 |
それ以外 | 未定義です |
|
0 | 空き領域を埋める文字として ' ' ではなく '0' を使います。
変換指定子 | 説明 |
diouxX aAeEfFgG | 変換結果が、nan や infinity などでなく、数字列に準じるものの場合、空き領域を埋める文字として ' ' ではなく '0' が使われます。フラグ '-' も指定されたときは、'-' が優先されます。diouxX が指定され、かつ精度も指定された場合、このフラグは無視されます。 |
それ以外 | 未定義です |
|
A.2.3 最小領域幅 (minimum field width)
最小領域幅 | 説明 |
10進正数 | 最低限、指定した値分の領域幅を確保します。フラグ未指定の場合、変換結果は右詰で、余った領域は ' ' で埋められます。 |
* | 引数から int 型の整数値を取得し、それを領域幅として使用します。負の値が指定された場合、フラグ '-' が指定されたものとみなし、その絶対値を領域幅として使用します。 |
A.2.4 精度 (precision)
精度 | 説明 |
10進正数 |
変換指定子 | 説明 |
diouxX | 最小限出力する数字の個数。未指定の場合、1 とみなします。 |
eEfF小数点以降に出力する数字の個数。未指定の場合、6 とみなします。 | |
aA小数点以降に出力する数字の個数。未指定の場合、FLT_RADIX==2のべき乗の時その値を正確に表現する値、FLT_RADIX!=2のべき乗の時その値を区別するに十分な値とみなします。 | |
gG最大有効桁数を指定します。未指定の場合、有効桁数すべてとみなします | |
s | 最大出力文字数を指定します。未指定の場合、\0 文字までのすべての文字とみなします |
それ以外 | 未定義です |
|
* | 引数から int 型の整数値を取得し、それを精度値として使用します。負の値が指定された場合、精度は指定されなかったものとして扱われます。 |
なし | 精度値 0 として扱われます |
A.2.5 長さ修飾子 (length modifier)
長さ修飾子 | 変換指定子 | 型 |
hh | diouxX | (un)signed char |
n | signed char * |
h | diouxX | (un)signed short |
n | signed short * |
l | diouxX | (un)signed long |
c | wint_t |
s | wchar_t * |
aAeEfFgG | double |
n | signed long * |
ll | diouxX | (un)signed long long |
n | signed long long * |
j | diouxX | (u)intmax_t |
n | intmax_t * |
z | diouxX | size_t |
n | 符号付きの size_t 相当 * |
t | diouxX | ptrdiff_t |
n | 符号付きの ptrdiff_t 相当 * |
L | aAeEfFgG | long double |
H | aAeEfFgG | _Decimal32 (TR 24732: Decimal floating point) |
D | aAeEfFgG | _Decimal64 (TR 24732: Decimal floating point) |
DD | aAeEfFgG | _Decimal128 (TR 24732: Decimal floating point) |
F | spn | far * (企業による非標準規格。DOS用) |
N | spn | near * (企業による非標準規格。DOS用) |
A.2.6 変換指定子 (conversion specifier)
変換指定子の同一項目に、大文字小文字がある場合、出力結果に用いられているアルファベット文字が、対応した文字で出力されます。
変換指定子 | 引数に要求される型 | 種別 | 表示形式 | 注記 |
d,i | 符号付き整数 | 10進数 | [-]?[0-9]+ | ・精度で指定された幅に満たない場合には、0を詰めます ・変換結果が 0 で、かつ精度が 0 の場合、何も出力されません |
u | 符号無し整数 | 10進数 | [0-9]+ |
o | 符号無し整数 | 8進数 | [0-7]+ |
x,X | 符号無し整数 | 16進数 | [0-9a-fA-F]+ |
f,F | 浮動小数点 | 10進数 | [-]?[0-9]+[.][0-9]+ |
・値が、数値でない場合、以下が用いられます
・e,f: [-]?inf / [-]?infinity / [-]?nan / [-]?nan (文字列)
・E,F: [-]?INF / [-]?INFINITY / [-]?NAN / [-]?NAN (文字列)
・フラグ '#' 未指定で、精度が 0 の場合、小数点は出力されません
・小数点が出力される場合、必ず数字が小数点前に前置されます
・値は適切に丸められます
|
e,E | 浮動小数点 | 10進数 | [-]?[1-9][.][0-9]+[eE][+-][0-9][0-9]+ [-]?0 |
g,G | 浮動小数点 | 10進数 | 条件で変わる | ・変換結果の指数が、-4 未満の場合、または精度以上の場合、e,E が使われ、それ以外の場合、f,F と同じ表示法が使われます。 ・後続する冗長な 0 は、フラグ '#' が指定されていなければ削除されます。 ・小数点文字は、小数以下が出力される場合のみ出力されます。 |
a,A | 浮動小数点 | 16進数 | [-]?0[xX][1-9a-fA-F][.][0-9a-fA-F]+[pP][+-][0-9]+ | ・フラグ '#' 未指定で、精度が 0 の場合、小数点は出力されません ・非正規化小数の場合のみ、小数点前に 0 を置く事ができます([-]?0[xX][0-9a-fA-F]…)。 |
c | 符号付き整数 | 文字 | 文字 | |
s | ゼロ終端文字列へのポインタ | 文字列 | 文字列 | ・ゼロ直前までの文字が出力されます ・精度指定がある場合、指定された長さだけ出力されます。 |
p | ポインタ | ポインタ | | 指定されたポインタ値を処理系依存方式で出力されます |
n | 符号付き整数へのポインタ | | なし | これまで出力された文字数を、ポインタが指す整数に書き込みます |
% | なし | 文字 | % | '%' を出力します |
|
|
|