Linux下的setjmp和longjmp

在LINUX下有一组标准跳转函数, 类似于编程中的局部跳转goto, 原型如下:

<textarea cols="50" rows="15" name="code" class="cpp">#include &lt;setjmp.h&gt; int setjmp(jmp_buf env); 返回值: 若直接调用则返回0, 若从longjmp调用返回则返回非0值. void longjmp(jmp_buf env, int val); </textarea>

 

这次用伪码举例:

<textarea cols="50" rows="15" name="code" class="cpp">#include &lt;setjmp.h&gt; #define ERR_USER -1 #define ERR_PASS -2 jmp_buf jbuf; int main() { int ret = 0; char DATE[LEN]; char GETS[LEN]; /* Get return value */ ret = setjmp(jbuf); /* Get next data */ while (get_next(GET, DATE)) { check(GET); } if (ret == ERR_USER) { printf("Username is incorrect/n"); } else if (ret == ERR_PASS) { printf("Password is incorrect/n"); } else { printf("CORRECT"); } return 0; } void check(char *) { if (...) { /* Username error */ longjmp(jbuf, ERR_USER); } else if (...) { /* Password error */ longjmp(jbuf, ERR_PASS); } else { ... } } </textarea>

当用户名或密码错误时, 程序不会继续检查这一行, 而是直接跳往下一行进行读取.

你可能感兴趣的:(Linux下的setjmp和longjmp)