我有一個關於C99標準默認參數促銷的問題。在這本書中的 「C程序設計 - 一種現代方法,第二版」 我讀過:C99標準默認參數促銷
參數轉換:
[...]
1)編譯器有在通話之前遇到了原型。
2)編譯器在調用之前沒有遇到過原型。編譯器執行默認參數促銷:(1)
float
參數轉換爲double
。 (2)執行積分促銷,導致參數char
和short
轉換爲int
。 (在C99中,整數促銷被執行。)
幾行進一步示出了其中不存在函數原型或定義調用前一個例子。它被評論如下:
當然,更好的解決方案是在調用它之前提供
square
的原型。 在C99中,在沒有首先提供函數的聲明或定義的情況下調用square
是錯誤。
那兩個草書句是不是相互矛盾呢?我的意思是,如果C99禁止在沒有預先聲明/定義的情況下調用函數,它如何確定這種函數調用中的促銷?
@JonathanLeffler,謝謝:) – 2012-08-17 15:58:42