2012-02-16 166 views
4

有沒有辦法告訴gcc檢查基於參數的函數中的參數號碼,類似於它給你一個「格式太多的參數」使用printf?自定義警告作爲printf的「格式太多參數」

例如,我們可以有,將給予其目前需要的參數數量信息,並有GCC告訴我們,當它是錯的一些必要參數一個使用stdarg頭文件法:

calculate_mean(4, //Number of arguments 
       3, 2, 1, 10); //actual parameters 

calculate_mean(5,   //Custom warning from gcc because 
       1, 5, 10, 2); //there is one missing argument 

,並提供:

# gcc -c file.c -o file.o 
gcc: Warning: calculate_mean: Too few arguments (5 required, 4 given) 

它可以從代碼內部,從配置文件完成,還是在編譯器內硬編碼,完全不可能?

+0

我對此表示懷疑,但這是一個有趣的問題 – MByD 2012-02-16 10:27:47

+1

也許你可以創建一個[gcc插件](http://gcc.gnu.org/onlinedocs/gccint/Plugins.html)。 – pmg 2012-02-16 10:40:05

回答

1

看來,對printf樣式字符串的支持被硬編碼到編譯器中。特別是,編譯器有一個特殊的format function attribute,它可以用來註釋printf樣式函數。

+0

謝謝!我認爲屬性'格式(原型,字符串索引,首先檢查)'是我正在尋找。儘管我找不到關於參數數字的任何屬性。 – Eregrith 2012-02-16 10:51:09