16.7 怎樣知道實際上有多少個參數傳入函數?

這一段信息不可移植。 一些舊系統提供一個非標準函數 nargs()。 然而它的可信度值得懷疑, 因為它的典型返回值是參數的字節長度, 而不是參數 的個數。結構、整數和浮點類型的值一般需要幾個字節的長度。

任何接收可變參數的函數都應該可以從傳入的參數本身來得到參數的數目。 類 printf 函數從格式字符串中的格式說明符來 確定參數個數, 就像 %d 這樣的格式說明符。所以如果格式字符串和參數數目不符時, 此類函數會出錯的很厲害。

還有一個常用的技巧, 如果所有的參數是同一個類型, 在參數列最後加一個標 記值。 通常用 0、-1 或適當類型轉換的空指針, 參見問題 5.2 和  15.4 例子中 exec1() 和 vstrcat() 的用法。

最後, 如果類型是可預見的, 你可以加一個參數數目的參數。當然調用者通常是 很不喜歡這種做法的。

參考資料: [PCS, Sec. 11 pp. 167-8]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)