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
.