Оператор try-catch в C

Есть ли оператор try-catch в C? или внешнюю библиотеку кто-то сделал? было бы очень полезно

если нет, то есть ли способ определить, является ли переменная массивом?

6 ответов

Решение

есть ли оператор try-catch в C? или внешнюю библиотеку кто-то сделал? было бы очень полезно

В Windows есть SEH, но вы не должны использовать это для общего использования приложения. Без чего-то вроде деструкторов C++ невозможно написать действительно безопасный код исключений.

если нет, то есть ли способ определить, является ли переменная массивом?

Да. Вы сами это отслеживаете.

В Си нет оператора try-catch, но вы можете создать механизм исключений, используя буферы перехода. Тем не менее, это, вероятно, очень плохая идея, поскольку теперь есть способ автоматически освобождать ресурсы при возникновении исключения.

Если вы имеете в виду void * как переменная, тогда нет способа определить, является ли это массивом. Тем не менее, вы можете встроить логику в свое приложение для получения информации о типе времени выполнения (RTTI).

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

Если компилятор может определить, является ли переменная массивом, вы тоже можете. Просто посмотрите, где он объявлен (или malloc'd, в случае динамически размещаемого массива).

Конечно, в Си нет встроенной поддержки исключений.

Взгляните на следующую ссылку, в основном, она использует setjmp() и longjmp ():

http://www.on-time.com/ddj0011.htm

try-catch - это схема обработки ошибок в объектно-ориентированной среде, такой как C++. ANSI C не является объектно-ориентированным и требует от вас объявления типов переменных. В C обработка ошибок выполняется главным образом путем проверки возвращаемых значений вызываемых функций. Вы можете увидеть больше в грязной ветке здесь: ANSI C эквивалент try/catch?

Другие вопросы по тегам