这种情况只能发生没有名称重整(我相信),所以下面的代码是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