>>> 此貼的回復 >> __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);
這樣定義函數之後,編譯器會檢查對此函數的調用。