оператор try-catch в C - PullRequest
       2

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

1 голос
/ 25 апреля 2011

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

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

Ответы [ 6 ]

3 голосов
/ 25 апреля 2011

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

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

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

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

1 голос
/ 28 апреля 2011

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

1 голос
/ 25 апреля 2011

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

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

0 голосов
/ 25 апреля 2011

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

0 голосов
/ 25 апреля 2011

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

0 голосов
/ 25 апреля 2011

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

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

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

...