![]() Chapter Contents |
![]() Previous |
![]() Next |
| onjmp |
| Portability: | SAS/C extension |
| SYNOPSIS | |
| DESCRIPTION | |
| RETURN VALUE | |
| CAUTION | |
| PORTABILITY | |
| IMPLEMENTATION | |
| EXAMPLE | |
| RELATED FUNCTIONS | |
| SEE ALSO |
| SYNOPSIS |
#include <lcjmp.h> void onjmp(jmp_buf env, int code, target);
| DESCRIPTION |
onjmp
defines the
target
label as a point to
which control should be transferred by a call to
longjmp
. The
longjmp
call specifies
the same
env
value as
onjmp
. The integer value specified by the
longjmp
call is stored in the
code
integer.
onjmp
sets the
code
variable to 0 on completion. Because the
occurrence of a
longjmp
assigns
onjmp
a value other than 0, the value of
code
can be tested elsewhere to determine whether a jump has taken
place.
| RETURN VALUE |
onjmp
has no return value.
| CAUTION |
Variables of storage class
auto
and
register
, whose values
are changed between the
onjmp
and
longjmp
calls, have indeterminate values after
the branch to
target
unless declared
volatile
.
onjmp
is implemented
as a macro and should not be used in any position where a value is required.
| PORTABILITY |
onjmp
is not a Standard construct; however, the macro that implements it is portable
to any system that implements
setjmp
.
| IMPLEMENTATION |
onjmp
is implemented as
#define onjmp(e, c, t) if (c = setjmp(e)) goto t
See setjmp for further implementation information.
| EXAMPLE |
#include <stdio.h>
#include <lcjmp.h>
#include <stdlib.h>
jmp_buf env;
void dummy();
main()
{
int errcode;
/* Allow restart via longjmp. */
onjmp(env, errcode,cleanup);
dummy();
puts("No error occurred in dummy routine.");
return;
cleanup:
printf("Beginning cleanup for error number %d\n", errcode);
}
void dummy()
{
puts("Entering dummy routine.");
longjmp(env, 3);
puts("Never reached.");
}
| RELATED FUNCTIONS |
| SEE ALSO |
![]() Chapter Contents |
![]() Previous |
![]() Next |
![]() Top of Page |
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.