#define DIVIDE_BY_ZERO -3 int SomeFunction(int a, int b) { if (b == 0) // can't divide by 0 XRaise(DIVIDE_BY_ZERO); return a / b; } void main(void) { XRecord XData; XLinkExceptionRecord(&XData); switch (setjmp(XData.Context)) { case 0: // this is the code block { int Result = SomeFunction(7, 0); // continue working with Result } break; case DIVIDE_BY_ZERO: printf("a division by zero occurred\n"); break; default: printf("some other error occurred\n"); break; case XFINALLY: printf("cleaning up\n"); } XUnLinkExceptionRecord(&XData); }
Example 2: setjmp()/longjmp()-based error handling with exception records allocated on the stack.