這種情況只能發生沒有名稱重整(我相信),所以下面的代碼是C. 說有在交流中定義的函數A作爲將「太多」參數傳遞給外部函數是否安全?
void A(int x, int y){
//Do stuff
}
現在也有一個單獨的文件BC:
extern "C"{
void A(int x, int y, int z);
}
void B(){
A(1, 2, 3);
}
A最初聲明爲只有2個參數,但在Bc中聲明時,它有一個額外的參數,並且它在B()中被第三個參數調用。 我知道有可能出現這種情況,例如與fortran子例程鏈接時,或者動態鏈接時。
我想將一個額外的參數傳遞給函數是不安全的,任何人都可以解釋當一個函數被調用並且參數傳遞給它時內存中發生了什麼?因此,通過這個既不使用也不想要的「額外」論證是多麼安全。
是否有可能額外的參數覆蓋功能內使用的內存空間?或者,函數調用A爲參數分配內存空間,然後告訴A參數內存塊的開始位置,A讀出前兩個參數並忽略最後一個,使其完全安全?
關於該功能的任何信息都會非常有啓發性,謝謝。
請注意,這裏幾乎所有的答案都假定爲x86 - 在幾個平臺上,這可能永遠不會有效。它完全取決於平臺和調用約定。 – 2010-09-09 14:39:06