我目前正在更改應用程序中一類函數的函數簽名。這些函數被存儲在一個函數表中,所以我期待着更改這個函數表。我剛剛意識到在某些情況下,我們已經使用了新的函數簽名。但是因爲所有東西都放在函數表中,所以它們被轉換爲正確的函數類型,所以不會引發任何警告。調用具有太多參數的C函數
當函數被調用時,會傳遞一些額外的參數,這些參數實際上並不是函數聲明的一部分,但它們位於參數列表的末尾。
我不能確定這是否是由單向函數參數在傳遞C.我想做到像sprintf的可變參數,可以保證,它必須是前面的參數就可以解決正確無論是在結束的情況下的參數列表?
它顯然在多個平臺上工作得很好,但出於好奇,我想知道它是如何工作的以及爲什麼它工作。
這將取決於您的調用約定。對於cdecl可能並不重要,但對於像stdcall這樣的東西,你會遇到問題。 – 2013-05-10 12:52:11
可以顯示錶中的函數指針聲明和您調用的函數的實際聲明是什麼? – ouah 2013-05-10 12:52:30