В GNU C результат равен 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Запись активации:
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?