попробуй поймать дуэт в с ++ - PullRequest
3 голосов
/ 28 февраля 2011

Я знаю, что общий метод использования try catch duo выглядит примерно так:

try
{
   //your code
}
catch(...)
{
   //any error goes here
}

Есть ли способ, с помощью которого catch () перехватывает код ошибки, не вводя никаких данных ... т.е., если я не выдал исключение, но компилятор c сделал это, тогда код ошибки может быть любым. Мне просто нужно поймать любой код ошибки и получить уведомление, вот и все.

Ответы [ 2 ]

9 голосов
/ 28 февраля 2011

Очевидно, вы пытаетесь catch ошибок от функций, которые не выдают исключения, но возвращают числовые коды ошибок. Это невозможно. Самое близкое, что вы можете получить - это обернуть все ваши функции C в код, генерирующий исключение, самостоятельно:

FILE *safe_fopen(char const *path, char const *mode)
{
    FILE *f = std::fopen(path, mode);
    if (f == NULL)
        throw std::runtime_error(std::strerror(errno));
    return f;
}

Невозможно вызвать исключение, когда программа разыменовывает нулевой указатель или недействительный фрагмент памяти, по крайней мере, не переносимым способом; когда это происходит, поведение просто не определено. Там нет кода ошибки, чтобы проверить, просто segfault на большинстве ОС.

Но, пожалуйста, уточните свою терминологию. Компилятор не выдает исключение, функция может делать это во время выполнения. Компилятор C имеет мало общего со всем этим.

0 голосов
/ 28 февраля 2011

Вам не нужно все ловить. Если вы хотите обработать только определенный тип исключения, перехватывайте только это исключение:

try {

} catch (MyExceptionType ex) {

}
...