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


戻る

inserted by FC2 system