2009-11-30 2 views
2

Мне было интересно, есть ли какой-либо параметр компилятора, желательно в gcc (g ++), который рассматривает отсутствие блоков try/catch как ошибки. Это стандартное поведение в java, и я всегда его любил.Задание компиляторов C++ для проверки обработки исключений

+2

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

+1

Найдите основную функцию. Поместите все в блок try-catch. Нет ошибки. :) (Интересно, что произойдет, если исключения возникают при построении глобальных переменных?) – UncleBens

ответ

8

Поскольку проверяются исключения в Java полагаются на throw подписи, вы можете прочитать, почему вы не хотите использовать throw подписи функций в C++ в this question на SO.

0

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

Так int f() throw(); является C++ для «лечения каких-либо исключений, воскреснув из функция е как ошибка»

+1

Возможно, стоит отметить, что это «обрабатывать как ошибку _runtime_». Компилятор C++ по-прежнему _required_ для компиляции 'void foo() throw() {throw 42; } '. –

1

Ну, используя спецификации исключений, как правило, плохая идея:. http://cplusplus.co.il/2009/10/06/exception-specifications/

И если не используется, компилятор в принципе не имеет никакого способа узнать, какие исключения могут быть выброшены, так что нет способ сделать это.

Что вы можете сделать, это обеспечить собственную реализацию std :: terminate (путем вызова std :: set_terminate()) и обработать исключенные исключения там.

Смежные вопросы