Библиотека обработки исключений в чистом C - PullRequest
3 голосов
/ 05 октября 2011

Есть ли кроссплатформенная c-библиотека для обработки исключений (для реализации try / catch в C)?

Я также ищу документацию, как это реализовано в C ++ (как маскируются прерывания или что-то в этом роде)

Ответы [ 5 ]

7 голосов
/ 06 октября 2011

Вы можете попробовать exceptions4c ; это библиотека обработки исключений в ANSI C, которая поддерживает: throw, try, catch, finally и еще несколько вкусностей. Например, он поддерживает шаблон Dispose , поэтому вы можете автоматически освобождать ресурсы. Вы также можете обрабатывать сигналы (например, SIGFPE и SIGSEGV), как если бы они были исключениями.

Он реализован поверх setjmp и longjmp (стандартная библиотека C) и является бесплатным программным обеспечением, поэтому вы можете читать и изменять исходный код.

Да, кстати, я автор :) Пожалуйста, посмотрите на это и сравните с другими альтернативами , чтобы увидеть, что подходит вам больше всего.

3 голосов
/ 05 октября 2011

Одним из способов достижения результатов, аналогичных обработке исключений в C ++, является использование setjmp и longjmp.См. Страницу Википедии для тривиального примера: http://en.wikipedia.org/wiki/Setjmp.h. Проверьте источник для интерпретатора Lua для реального примера.

Обратите внимание, что это НЕ будет истинной реализацией try / catch в том смысле, что вы можете вызывать вашу библиотеку из C ++ и получать реальные исключения.

0 голосов
/ 17 июня 2014

Попробуйте это.

#define TRY         char *__exc_message = NULL; do
#define THROW(exc)  { __exc_message = exc; break; }
#define CATCH(exc)  while(0); if(__exc_message != NULL) { exc = __exc_message;
#define FINALLY     }

void Test(int a, int b)
{
    char *exc = NULL;

    TRY
    {
        if(a < b) THROW("A < B!");
        if(a > b) THROW("A > B!");

        TRACE_INFO("Ok :-)");
    }  
    CATCH(exc)
    {
        TRACE_ERROR(exc);
    }
    FINALLY
    {
        TRACE_INFO("Finally...");
    }
}
0 голосов
/ 05 октября 2011

Библиотека OSSP ex может удовлетворить ваши требования.Он использует средства переключения контекста и является потокобезопасным.Хорошо написано и задокументировано, как и все компоненты OSSP.

0 голосов
/ 05 октября 2011

XXL - одна из таких библиотек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...