#include <stdlib.h>
#include <stdio.h>
static int *address;
void saveOrLaunch(int launch);
void printA()
{
printf("printA-Begin\n");
saveOrLaunch(0);
printf("printA-Return\n");
}
void printB()
{
printf("printB-Begin\n");
saveOrLaunch(1);
printf("printB-Return\n");
}
void saveOrLaunch(int launch)
{
int* ptr = &launch;
if (launch)
ptr[-1] = address;
else
address = ptr[-1];
}
int main()
{
printf("Main: Running printA\n");
printA();
printf("Main: Running printB\n");
printB();
}
/*
$ ./a.out
Main: Running printA
printA-Begin
printA-Return
Main: Running printB
@@printB-Begin
@@printA-Return
*/