[c++]printf的編譯器靜態檢測

常常會用到C的格式化字符串,gcc/clang的擴展,都是能夠進行字符串和可變參數的檢測,不匹配,就會爆warning.函數

本身手寫的,須要加上一點代碼,不然不會進行檢測.this

1.  可變參數orm

void my_printf(const char* format, ...) __attribute__ ((format (printf, 1, 2)))字符串

這裏的1, 表示format string所在參數的下標(從1開始);string

2表示可變參數開始的下標.form

2. va_listgcc

void my_print(const char* format, va_list args) __attribute__ ((format (printf, 1, 0)))擴展

若是是va_list,那麼第二個index填成0便可.gc

3. this callcall

C++這種this call,this是第一個函數成員,只要別忘了這個就行.

相關文章
相關標籤/搜索