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)