# include <stdio.h>
typedef char * CharPtr ;
void Test1() throw ( CharPtr ) ;
void Test2() throw ( CharPtr ) ;
void Test3() throw ( CharPtr ) ;
int gNum = 0;
void Debug( bool isPrint, CharPtr variableName, int variable )
{
if ( !isPrint )
return ;
printf( "%s is %d\n", variableName, variable );
} // Debug()
void Test3() throw ( CharPtr )
{
try
{
gNum = 5;
Test1();
} // try
catch ( CharPtr msg )
{
printf( "%s", msg );
throw CharPtr( "Enter Test3()...\n" );
} // catch
} // Test3()
void Test2() throw ( CharPtr )
{
try
{
Test3();
} // try
catch ( CharPtr msg )
{
printf( "%s", msg );
throw CharPtr( "Enter Test2()...\n" );
} // catch
} // Test2()
void Test1() throw ( CharPtr )
{
try
{
int a = 0;
if ( gNum == 5 ) // something error
{
Debug( true, "a", a );
throw CharPtr( "Error\n" );
} // if
Test2();
} // try
catch ( CharPtr msg )
{
printf( "%s", msg );
throw CharPtr( "Enter Test1()...\n" );
} // catch
} // Test1()
int main()
{
try
{
Test1();
} // try
catch( CharPtr msg )
{
printf( "%s", msg );
} // catch
} // main()
IyBpbmNsdWRlIDxzdGRpby5oPgoKdHlwZWRlZiBjaGFyICogQ2hhclB0ciA7Cgp2b2lkIFRlc3QxKCkgdGhyb3cgKCBDaGFyUHRyICkgOwp2b2lkIFRlc3QyKCkgdGhyb3cgKCBDaGFyUHRyICkgOwp2b2lkIFRlc3QzKCkgdGhyb3cgKCBDaGFyUHRyICkgOwoKaW50IGdOdW0gPSAwOwoKdm9pZCBEZWJ1ZyggYm9vbCBpc1ByaW50LCBDaGFyUHRyIHZhcmlhYmxlTmFtZSwgaW50IHZhcmlhYmxlICkKewogIGlmICggIWlzUHJpbnQgKQogICAgcmV0dXJuIDsKCiAgIHByaW50ZiggIiVzIGlzICVkXG4iLCB2YXJpYWJsZU5hbWUsIHZhcmlhYmxlICk7Cn0gLy8gRGVidWcoKQoKdm9pZCBUZXN0MygpIHRocm93ICggQ2hhclB0ciApCnsKICB0cnkKICB7CiAgICBnTnVtID0gNTsKICAgIFRlc3QxKCk7CiAgfSAvLyB0cnkKICBjYXRjaCAoIENoYXJQdHIgbXNnICkKICB7CiAgICBwcmludGYoICIlcyIsIG1zZyApOwogICAgdGhyb3cgQ2hhclB0ciggIkVudGVyIFRlc3QzKCkuLi5cbiIgICk7CiAgfSAvLyBjYXRjaAoKfSAvLyBUZXN0MygpCgp2b2lkIFRlc3QyKCkgdGhyb3cgKCBDaGFyUHRyICkKewogIHRyeQogIHsKICAgIFRlc3QzKCk7CiAgfSAvLyB0cnkKICBjYXRjaCAoIENoYXJQdHIgbXNnICkKICB7CiAgICBwcmludGYoICIlcyIsIG1zZyApOwogICAgdGhyb3cgQ2hhclB0ciggIkVudGVyIFRlc3QyKCkuLi5cbiIgKTsKICB9IC8vIGNhdGNoCgp9IC8vIFRlc3QyKCkKCnZvaWQgVGVzdDEoKSB0aHJvdyAoIENoYXJQdHIgKQp7CiAgdHJ5CiAgewogICAgaW50IGEgPSAwOwogICAgaWYgKCBnTnVtID09IDUgKSAvLyBzb21ldGhpbmcgZXJyb3IKICAgIHsKICAgICAgRGVidWcoIHRydWUsICJhIiwgYSApOwogICAgICB0aHJvdyBDaGFyUHRyKCAiRXJyb3JcbiIgKTsKICAgIH0gLy8gaWYKCiAgICBUZXN0MigpOwogIH0gLy8gdHJ5CiAgY2F0Y2ggKCBDaGFyUHRyIG1zZyApCiAgewogICAgcHJpbnRmKCAiJXMiLCBtc2cgKTsKICAgIHRocm93IENoYXJQdHIoICJFbnRlciBUZXN0MSgpLi4uXG4iICk7CiAgfSAvLyBjYXRjaAoKfSAvLyBUZXN0MSgpCgppbnQgbWFpbigpCnsKICB0cnkKICB7CiAgICBUZXN0MSgpOwogIH0gLy8gdHJ5CiAgY2F0Y2goIENoYXJQdHIgbXNnICkKICB7CiAgICBwcmludGYoICIlcyIsIG1zZyApOwogIH0gLy8gY2F0Y2gKICAKfSAvLyBtYWluKCk=