14.1.2.9 format (archetype,
string-index, first-to-check)
The format attribute specifies that a function takes
printf, scanf or strftime style
arguments which should be type-checked against a format string. For example, consider
the declaration:
extern int my_printf (void *my_object, const char *my_format, ...)
__attribute__ ((format (printf, 2, 3)));
This causes the compiler to check the arguments in calls to
my_printf for consistency with the printf style
format string argument my_format.
The parameter archetype determines how the format
string is interpreted, and should be one of printf,
scanf or strftime. The parameter
string-index specifies which argument is the format
string argument (arguments are numbered from the left, starting from 1), while
first-to-check is the number of the first argument to
check against the format string. For functions where the arguments are not available to
be checked (such as vprintf), specify the third parameter as zero. In
this case, the compiler only checks the format string for consistency.
In the previous example, the format string (my_format)
is the second argument of the function my_print, and the arguments to
check start with the third argument, so the correct parameters for the format attribute
are 2 and 3.
The format attribute allows you to identify your own
functions that take format strings as arguments, so that the compiler can check the
calls to these functions for errors. The compiler always checks formats for the ANSI
library functions printf, fprintf,
sprintf, scanf, fscanf,
sscanf, strftime, vprintf,
vfprintf and vsprintf, whenever such warnings are
requested (using -Wformat), so there is no need to modify the header
file stdio.h.
