这种情况只能在没有名称修饰的情况下发生(我相信),所以下面的代码是 C。假设在 Ac 中有一个函数 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 读出前两个参数并忽略最后一个参数,使其完全安全?
任何有关该功能的信息都会非常有启发性,谢谢。