c语言的异常处理

利用setjmp和longjmp处理异常

      c语言种可以利用setjmp和longjmp来实现程序的直接跳转,这种机制并不适用于在程序开发中设计逻辑流程,但用来实现异常处理机制则是非常的适用。

      比如写一个实现内存分配的函数,可以这样:

void *allocate(unsigned n)
{
 void *new=malloc();

 if (new)
  return new;

 if (Allocation_handled)    //如果new为NULL,则执行到此判断
  longjmp(Allocate_Failed,1); //跳转

 assert(0);
}

      而在调用时,可以先设好跳转的“目的地”,再调用allocate:

char *buf;
Allocation_handled=1;

if ( setjmp(Allocate_Failed) )
{
 fprintf(stderr,"Couldn't allocate the buffer! ");
 exit(1);
}

buf = allocate(1000000);

Allocation_handled=0

      为了使用方便可以把以上setjmp和longjmp做一个宏定义,这里就不细说了。但总的来说这个异常处理机制是不如c++的那么方便,但对于c语言来说也算不错了。


相关文章

分类

留言:

关于文章

This page contains a single entry by DongHao published on 08 15, 2007 6:32 PM.

看了《斯巴达三百壮士》 was the previous entry in this blog.

几种语言的urlencode is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.