16.3 為什麼當 n 為 long int, printf("%d", n);  編譯時沒有匹配警告?我以為 ANSI 函數原型可以防止這樣的類型不匹配。

當一個函數用可變參數時, 它的原型說明沒有也不能提供可變參數的數目和類型。 所以通常的參數匹配保護適用於可變參數中的可變部分。 編譯器不能執行內含的轉換或警告不匹配問題16.1

參見問題 5.2, 11.4, 12.7 和 15.2



腳注

... 編譯器不能執行內含的轉換或警告不匹配問題16.1
譯者注: 現代的編譯器 (例如  gcc), 如果打開編譯警告參數, 編譯器對標準中的可變參數函數 (printf, scanf ... 等) 會進行匹配測試。像問題中的源代碼, 用 ``gcc -Wall" 進行編譯, 會給出這樣的警告: ``warning: int format, long int arg (arg 2)"
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)