C/C++ code/*error.h*/
#ifndef _ERROR_H
#define _ERROR_H
#include
#include
#define TRY ErrNum = setjmp(Resume);if(0 == ErrNum)
#define CATCH(n) else if((0 != ErrNum) && (((n) == ErrNum) || ((n) == ALL_ERROR)))
#define THROW(n) longjmp((Resume),(n))
#define GET_ErrorString(n) errString[n]
typedef enum
{
ERROR_NONE,
ERROR_TEST,
MEMORY_OFFER,
DIVSION_BY_ZERO,
OUT_OF_RUN,
/*
加入其它的错误号
*/
ALL_ERROR,
}ERROR_E;
const char* errString[]=
{
"",
"Error Test",
"Not enough memory",
"Divsion by zero",
"Out of run",
/*
加入错误号所对应的错误信息
*/
};
int ErrNum = 0;
jmp_buf Resume = {0};
#endif /*_ERROR_H*/
/*main.c*/
#include
#include
#include "error.h"
extern int ErrNum;
int main(void)
{
int n = 0;
printf("Input N:");
scanf("%d",&n);
TRY
{
int j = 0;
if(0 >= n)
{
THROW(ERROR_TEST);
}
else if(n > 0 )
{
printf("N is:%d\n",n);
}
while (1)
{
j++;
if(j > 100000)
THROW(OUT_OF_RUN);
}
}
CATCH(ALL_ERROR)
{
printf("%s,ErrNum:%d!\n",GET_ErrorString(ErrNum),ErrNum);
exit(ErrNum);
}
}