Search code examples
ctry-catchcritical-section

Try-catch-like Behaviour with Skipping Critical Code in C


Possible Duplicate:
ANSI C equivalent of try/catch?

Is there a way to skip critical code ? More or less like try-catch in modern programming languages. Just now I'm using this technique to spot errors:

bindSignals();
{
    signal(SIGFPE, sigint_handler);
    // ...
}

int main(void)
{
    bindsignals();
    int a = 1 / 0; // division by zero, I want to skip it
    return 0;
}

The problem is if I don't exit the program in the handler I get the very same error again and again. If possible I would like to avoid goto. I also heard about "longjump" or something. Is it worth to (learn to) use ?


Solution

  • I'm done. That's how my code looks like now. Almost like Java and C#.

    #include <setjmp.h>
    
    jmp_buf jumper;
    
    #define try           if (setjmp(jumper) == 0)
    #define catch         else
    #define skip_to_catch longjmp(jumper, 0)
    
    static void sigint_handler(int sig)
    {
        skip_to_catch;
    }
    
    int main(void)
    {
        // init error handling once at the beginning
        signal(SIGFPE,  sigint_handler);
    
        try
        {
            int a = 1 / 0;
        }
        catch
        {
            printf("hello error\n");
        }
        return 0;
    }