点击这里给我发消息 点击这里给我发消息

基础:c语言中的错误处理

添加时间:2013-12-7
    相关阅读: 链接 系统

 #include<stdio.h>
#include<setjmp.h>

jmp_buf ebuf;
int func();
int main(){
int i;
printf("1111\n");
i = setjmp(ebuf);
printf("%d\n",i);
if(i==0){
func();
printf("this will not be printed");
}
if(i==3){
printf("3333\n");
}
printf("%d\n",i);
return 0;
}
int func(){
printf("2222\n");
longjmp(ebuf,3);
}

    输出结果:

    1111

    0

    2222

    3

    3333

    3

    相当与goto语句,当执行func函数时,由longjmp跳转到setjmp处,然后再往下执行。

    注意的地方:longjmp(dbuf,val)其中的val不能为0,如果为0则系统默认再i=setjmp(ebuf)中i的返回值为1;

    以下函数实现了多个函数之间的跳转,其中具体代码在 动态调用链接库中

 #include <stdio.h>
#include <windows.h>
#include <setjmp.h>

jmp_buf ebuf;
int jump1();
int jump2();
int i;

main(){
i = setjmp(ebuf);
if(i==0|i==2){
jump1();
}
if(i==1){
jump2();
}
}
int jump1(){
while(1){
HINSTANCE hInstance;
void (*func)();
hInstance = LoadLibrary("my.dll");

showGUI();
char s[10];
scanf("%s",&s);
func = ( void (*)() )GetProcAddress(hInstance,s);
if(!func){
longjmp(ebuf,1);
}
(*func)();
continue;
}
}
int jump2(){
printf("your input is wrong\n");
longjmp(ebuf,2);
}
int showGUI(){
FILE *login;
char c;
login = fopen("login.txt","r");
if(!login){
printf("file err:login\n");
return;
}
while(1){
c = fgetc(login);
if(c == EOF){
break;
}
printf("%c",c);
}
fclose(login);
return 0;
}

相关基础:c语言中的错误处理

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册