在LINUX下有一组标准跳转函数, 类似于编程中的局部跳转goto, 原型如下:
<textarea cols="50" rows="15" name="code" class="cpp">#include <setjmp.h> 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 <setjmp.h> #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>
当用户名或密码错误时, 程序不会继续检查这一行, 而是直接跳往下一行进行读取.