>>> 此贴的回复 >> __attribute__,__format__和__printf__都是GCC对C语法的扩展。
__attribute__定义函数或变量的属性,其格式为:
__attribute__(( ))
注意__attribute__后面是双括号。
__format__定义函数的参数形式与printf, scanf, strftime和strfmon中的哪一个相似, 其格式为:
__format__ (archetype, string-index, first-to-check)
archetype表示参数形式,可以为__printf__, __scanf__, __strftime__或__strfmon__。 string-index表示第几个参数为格式字符串,first-to-check表示从第几个参数开始对照格式 字符串检查,参数索引从1开始。
__printf__表示为printf形式的参数。
合起来,__attribute__(( __format__ (__printf__, fmt, firstva) )) 表示具有 printf形式参数的函数。
这个宏可以这样用:
int my_print_func(const char* fmt, ...) printfunc(1, 2);
这样定义函数之后,编译器会检查对此函数的调用。