-.\" This feature seems to be present at least as far back as glibc 2.0.
-GNU C ライブラリ (glibc) では非標準のオプションをサポートしており、 このオプションを使うと変換指定子 \fB%s\fP や
-\fB%a[\fP\fIrange\fP\fB]\fP への入力文字列に対して十分な大きさの文字列をライブラリが動的に確保する ようになる。
-この機能を使用するには、長さ修飾子として \fBa\fP を指定する (したがって、全体としては \fB%as\fP や \fB%a[\fP\fIrange\fP\fB]\fP
-となる)。 以下の例にあるように、呼び出し側は返された文字列を \fBfree\fP(3) しなければならない。
+The GNU C library supported the dynamic allocation conversion specifier (as
+a nonstandard extension) via the \fBa\fP character. This feature seems to be
+present at least as far back as glibc 2.0.
+.PP
+It is not available if the program is compiled with \fIgcc \-std=c99\fP or \fIgcc
+\-D_ISOC99_SOURCE\fP (unless \fB_GNU_SOURCE\fP is also specified), in which case
+the \fBa\fP is interpreted as a specifier for floating\-point numbers (see
+above).
+
+バージョン 2.7 以降では、glibc は \fBa\fP 修飾子と同じ目的で \fBm\fP 修飾子も提供している。 \fBm\fP 修飾子は以下の利点がある。
+.IP * 2
+\fB%c\fP 変換指定子にも適用できる (例えば \fB%3mc\fP)。
+.IP *
+浮動小数点変換指定子としての \fB%a\fP との紛らわしさが避けられる (また \fIgcc \-std=c99\fP などの影響も避けられる)。
+.IP *
+It is specified in the POSIX.1\-2008 standard.
+.SH バグ
+全ての関数は、完全に C89 に準拠している。しかし 追加で \fBq\fP と \fBa\fP 指定子が提供されており、同様に \fBL\fP と \fBl\fP
+指定子の付加的な振る舞いもある。後者は、 C89 で定義された指定子の振る舞いを変更するものなので、 バグとみなされるかもしれない。
+.PP
+ANSI C で定義された型修飾子と変換指定子の組み合わせの中には 意味を
+なさないものがある (例えば、 \fB%Ld\fP)。 これらが指定された場合、
+Linux 上でははっきりと定義された振る舞いをするかもしれないが、
+他のアーキテクチャでも同様になっているとは限らない。
+それゆえに、ほとんどの場合、 ANSI C で定義されていない修飾子を使用した
+方が良い。すなわち、 \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP 変換や \fBll\fP
+と組み合わせる場合には、 \fBL\fP の代わりに \fBq\fP を使用した方が良い。
+.PP
+\fBq\fP の使用方法は 4.4BSD と同じではない。 4.4BSD では \fBq\fP は \fBL\fP と同等に浮動小数の変換に使用される。
+.SH 例
+To use the dynamic allocation conversion specifier, specify \fBm\fP as a length
+modifier (thus \fB%ms\fP or \fB%m[\fP\fIrange\fP\fB]\fP). The caller must \fBfree\fP(3)
+the returned string, as in the following example: