Как выдать исключение в C?

Я ввел это в Google, но только нашел практические руководства в C++,

как сделать это в C?

85
задан httpinterpret 23 May 2010 в 12:48
поделиться

6 ответов

В C вы можете использовать комбинацию функций setjmp () и longjmp () , определенных в setjmp.h . Пример из Википедии

#include <stdio.h>
#include <setjmp.h>

static jmp_buf buf;

void second(void) {
    printf("second\n");         // prints
    longjmp(buf,1);             // jumps back to where setjmp 
                                //   was called - making setjmp now return 1
}

void first(void) {
    second();
    printf("first\n");          // does not print
}

int main() {   
    if ( ! setjmp(buf) ) {
        first();                // when executed, setjmp returns 0
    } else {                    // when longjmp jumps back, setjmp returns 1
        printf("main");         // prints
    }

    return 0;
}

Примечание: Я бы посоветовал вам , а не использовать их, поскольку они ужасно работают с C ++ (деструкторы локальных объектов не вызываются), и это действительно сложно понять, что происходит. Вместо этого верните какую-то ошибку.

31
ответ дан 24 November 2019 в 08:17
поделиться

В Win с MSVC есть __ попробуйте ... __except ... но это действительно ужасно, и вы не хотите использовать его, если вы возможно, можно этого избежать. Лучше сказать, что здесь нет исключений.

7
ответ дан 24 November 2019 в 08:17
поделиться

В C. нет исключений. В C об ошибках сообщает возвращаемое значение функции, выходное значение процесса, сигналы процессу ( Program Error Signals (GNU libc) ) или аппаратное прерывание ЦП (или другая ошибка уведомления ЦП, если она есть) ( Как процессор обрабатывает случай деления на ноль ).

Однако исключения определены в C ++ и других языках. Обработка исключений в C ++ описана в стандарте C ++ «S.15 Exception processing», в стандарте C нет эквивалентного раздела.

66
ответ дан 24 November 2019 в 08:17
поделиться

Обычный старый C на самом деле изначально не поддерживает исключения.

Вы можете использовать альтернативные стратегии обработки ошибок, такие как:

  • возврат кода ошибки
  • возврат FALSE и использование переменной или функции last_error .

См. http://en.wikibooks.org/wiki/C_Programming/Error_handling .

19
ответ дан 24 November 2019 в 08:17
поделиться

C не имеет исключений.

Существуют различные хакерские реализации, которые пытаются это сделать (один пример на: http://adomas.org/excc/ ).

6
ответ дан 24 November 2019 в 08:17
поделиться

C не поддерживает исключения. Вы можете попробовать скомпилировать свой код C как C ++ с помощью Visual Studio или G ++ и посмотреть, будет ли он компилироваться как есть. Большинство приложений C будут компилироваться как C ++ без значительных изменений, и затем вы можете использовать синтаксис try ... catch.

2
ответ дан 24 November 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: