GNU C では、The Result は 13 です。静的リンクが使用されているためです。
それ以外の場合、動的リンクが使用されている場合、結果は 16 になります。
#include <stdio.h>
int h(){
int x = 1;
int g(int z){
return z + x; <------------------ P
}
int f(int y){
int x = y + 1;
return g(x * y);
}
return f(3);
}
int main(){
int a = h();
printf("%d\n", a);
}
PポイントでActivation Recordは
z = 12
x = 4
y = 3
f とコード f へのポインタ
g とコード g へのポインタ
x = 1
h およびコード h へのポインター
a
main およびコード main へのポインター
そうですか?
しかし、関数 g が返された場合、それはどうなっているでしょうか?
g のアクティベーションと変数 z のアクティベーションが削除されます。
次に、スタックフレームで、穴が見えます。穴は本当に現れますか?
In-line ブロックによると、関数 h では、
変数 x が最も外側のブロックです。(関数 g' ブロックが変数 x のブロックにネストされていることを意味します) 次の外側のブロックは関数 g、次の関数 f ... では、関数 f の静的リンクは関数 g のフレーム ポインターを指していますか? または関数hのフレームポインタ?関数 g の静的リンクはどうですか?