関数属性 format_arg は、書式制御ストリングを変更するユーザー定義の関数を識別する手段を提供します。 関数が識別されると、そのオペランドがユーザー定義関数への呼び出しである ような関数 printf、scanf、strftime、または strfmon への呼び出しで、エラーを検査することができます。 この言語フィーチャーは、C89、C99、および Standard C++ に対する直交拡張で、GNU C および C++ で開発されたプログラムの移植を容易にするためにインプリメントされています。
構文を以下の図で示します。
>>-__attribute__--((--+-format_arg-----+--(--string_index--)--))->< '-__format_arg__-'
ここで、string_index は、どの引き数が書式制御ストリングであるかを指定する、 1 から始まる定数の整数式です。 C++ の非静的メンバー関数の場合、string_index は、 最初のパラメーターが暗黙の this パラメーターであるため、2 から始まります。
同じ関数で複数の format_arg 属性を指定することが可能であり、その場合、すべてが適用されます。
extern char* my_dgettext(const char* my_format, const char* my_format2) __attribute__((__format_arg__(1))) __attribute__((__format_arg__(2))); printf(my_dgettext("%","%")); //printf-style format diagnostics are performed on both "%" strings
関連参照