void a()
{
b();
}
void b()
{
}
int main()
{
a();
return 0;
}
W tym prostym programie, jak dobrze rozumiem zachodzi coś takiego:
1) start programu, dodanie funkcji main do stosu
2) wywołanie a() -> dodanie a do stosu
3) wywołanie b() z wewnątrz a -> dodanie b do stosu
4) zakończenie b -> usunięcie b ze stosu, kontynuujemy najwyższą funkcję na stosie czyli a
5) zakończenie a -> usunięcie a ze stosu, kontynuujemy najwyższą funkcję na stosie czyli main
6) zakończenie main -> usunięcie main ze stosu. Jako że stos jest pusty, kończymy program.
Moje pytanie: W jaki sposób można zaimplementować to tak, aby w momencie wykonywania punktu 5, po powrocie do funkcji main nie wywoływała się ona od początku, tylko od momentu w którym zakończyła, kiedy program z niej wychodził?
Przykładowe rozwiązanie, choć nie wiem jak je wykonać:
W momencie wyjścia z funkcji, zastąp funkcję do której wchodzisz jakimś GOTO: statement, potem trzymaj w stosie wskaźniki do funkcji & wskaźniki do tych GOTO.
Nie wiem czy tak można, w C++ jestem dość nowy.
Głównie pytam z ciekawości: jak to działa i czy da się takie coś zaimplementować samemu w C/C++, np aby przedefiniować przez co rozumiem zakończenie funkcji