/* This is free software, under GNU copyleft. (C) 1998 Melissa O'Neill. * * Compile with: * g++ -save-temps -O2 -o exntest exntest.cc * * Run with: * exntest * ...or: * exntest RaiseAnException * */ #include #if CHECK_CONSTRUCTORS struct wotsit { wotsit() { printf("Created the wotsit.\n\n"); } ~wotsit() { printf("\nDestroyed the wotsit.\n"); } }; static wotsit thingy; #endif /* CHECK_CONSTRUCTORS */ struct TooManyArguments {}; void foo(int argc, char *argv[]) { int z = 99; register int t = 2001; if (argc > 1) throw TooManyArguments (); } void bar(int argc, char *argv[]) { int f = 96; int g = 97; int h = 98; register int *p = &argc; register char **q = argv; register int *r = &h; foo(argc, argv); } int main (int argc, char *argv[]) { register int a = argc; register int b = a+a; register int c = a+b; register int d = a+c; int j = 100; int k = 105; int l = 110; int m = 120; register int *p = &j; register int *q = &k; register int *r = &l; register int *s = &m; try { printf("I've set some variables to these values:\n"); printf(" %d %d %d %d %d %d %d %d\n", a, b, c, d, *p, *q, *r, *s); bar(argc, argv); printf("No arguments, no exception raised\n"); } catch ( TooManyArguments ) { printf("TooManyArguments exception raised (whoopie!)\n"); printf("My variables should still be the same:\n"); printf(" %d %d %d %d %d %d %d %d\n", a, b, c, d, *p, *q, *r, *s); } catch ( ... ) { printf("ERROR! Unknown exception raised.\n"); } return 0; }