この状況は、名前マングリングなしでのみ発生する可能性があるため (私は信じています)、以下のコードは 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() で 3 番目の引数で呼び出されます。この状況が発生する可能性があることはわかっています。たとえば、fortran サブルーチンとリンクしている場合や、動的にリンクしている場合です。
関数に余分な引数を渡すのは安全ではないと思いますが、関数が呼び出されて引数が渡されたときにメモリ内で何が起こっているのか説明できますか? したがって、使用も要求もされていないこの「余分な」引数を渡すことがどれほど安全かということです。
余分な引数が、関数内で使用されるメモリ内のスペースを上書きする可能性はありますか? それとも、A への関数呼び出しは、引数用にメモリ内のスペースを割り当ててから、引数メモリ ブロックの先頭がどこにあるかを A に伝え、A は最初の 2 つの引数を読み取り、最後の引数を無視して、完全に安全にしますか?
関数に関する情報は非常に啓発的です、ありがとう。