#include #include // strcmp #include // exit #include // _exit using namespace std; int ExitFlag = 0; class testClass { public: ~testClass() { cout << "An instance of testClass was destroyed " << endl; } }; void fun1(void) { cout << "Function 1 is being called " << endl; ExitFlag = 4; return; } void fun2(void) { cout << "Function 2 is being called " << endl; ExitFlag = 5; return; } void OnExitFunction(int exitStatus, void * arg) { static int calls = 0; calls++; cout << "In the OnExitFunction" << endl; cout << "I was called " << calls << " times "<< endl; cout << "The exit status was " << exitStatus << endl; cout << "And Exit flag is set to " << *((int *) arg) << endl; cout << endl; return; } int main(int argc , char * argv[]) { testClass a; on_exit(OnExitFunction,&ExitFlag); atexit(fun1); atexit(fun2); on_exit(OnExitFunction,&ExitFlag); cout << "In the main routine " << endl; cout << endl; if (argc == 2 and !strcmp(argv[1],"return")) { cout << "Calling return 0" << endl; cout << endl; return 0; } else if (argc == 2 and !strcmp(argv[1],"exit")) { cout << "Calling exit(0)" << endl; cout << endl; exit(0); } else if (argc == 2 and !strcmp(argv[1],"_exit")) { cout << "Calling _exit(0)" << endl; cout << endl; _exit(0); } else if (argc == 2 and !strcmp(argv[1],"abort")) { cout << "Calling abort" << endl; abort(); } cout << "Falling off the end "<< endl; }