C言語 -- setjmp.h そして setjmp()/longjmp()
戻る
::::::::::::::
test1.c
::::::::::::::
/** $Id: setjmp_and_longjmp.html,v 1.1 2009/06/22 16:12:26 kishi Exp kishi $ */
#include <stdio.h>
#include <setjmp.h>
jmp_buf context;
void myFunction( int *value ) {
printf( "in the beginning of myFunction() ... value = %d\n", *value );
if ( *value < 0 ) {
longjmp( context, 1 );
} else {
*value *= 2;
}
}
int main( int argc, char** argv ) {
if ( argc != 2 ) {
fprintf( stderr, "Usage: %s [value]\n", argv[ 0 ] );
return -1;
}
int value = atoi( argv[ 1 ] );
if ( setjmp( context ) == 0 ) {
printf( "in main ... before myFunction()\n" );
myFunction( &value );
printf( "in main ... after myFunction()\n" );
}
printf( "value=%d\n", value );
return 0;
}
$ ./test1
Usage: ./test1 [value]
$ ./test1 100
in main ... before myFunction()
in the beginning of myFunction() ... value = 100
in main ... after myFunction()
value=200
$ ./test1 -7
in main ... before myFunction()
in the beginning of myFunction() ... value = -7
value=-7
戻る