C语言的异常机制--setjump()和longjump()实现

 

/* ------------------------------------------------------------------------- ** File : cexcept.c * ** Coder: Spark Song. * ** Note : Use the example code from 《C Interfaces and Implementations》 * ** ------------------------------------------------------------------------- */ #include <setjmp.h> #include <stdlib.h> #include <stdio.h> #include <assert.h> int Allocation_handled = 0; jmp_buf Allocate_Failed; void *allocate(unsigned n) { void * new = (void *)malloc(n); if (new) return new; if (Allocation_handled) /* 如果实例化了异常处理程序的话... */ longjmp(Allocate_Failed, 1); /* 产生异常,并抛出 */ assert(0); /* 如果没有实例化异常处理程序,则此断言会报出运行期的错误 */ } int main(int argc, char *argv[]) { char *buf = 0; int count = 0; Allocation_handled = 1; /* 设置实例化异常的标志,设为1表示实例化了异常处理程序 */ if (setjmp(Allocate_Failed)) /* 实例化异常 */ { fprintf(stderr, "EXCEPT: Couldn't allocate the buffer/n"); exit(EXIT_FAILURE); } while(1) /* 测试代码:一直分配内存,直到没有内存为止。没有内存时会触发异常 */ { buf = (char *)allocate(4096000); printf("Allocate successs, the count is: %d/n", count++); } Allocation_handled = 0; return 0;  

 

你可能感兴趣的:(c,File,测试,语言,Allocation)