2011-01-21 4 views
1

Как включить исключения в XCode - 3.2.3. Есть ли какой-либо флаг, как я должен включить для компилятора для обработки исключений? Пробовал поиск по Google, но не нашел достаточной информации о XCode с C++!Как включить обработку исключений на XCode 3.2.3?

#include <iostream> 
#include <exception> 

int main() 
{ 
    try 
    { 
     int i=5,j=0; 
     int res = i/j; 
    } 
    catch (const std::exception& exe) 
    { 
     std::cerr<< exe.what(); 
    } 
    catch (...) 
    { 
     std::cout<< "\n Default Exception Handler \n"; 
    } 

    return 0; 
} 

Выход:

Загрузка программы в отладчик ...
программа загружена.
запустить
[Переключение на обработку 1332]
Запуск ...
Программа получила сигнал: «EXC_ARITHMETIC».
sharedlibrary apply-load-rules все
kill
Текущий язык: авто; В настоящее время C++
бросить
Отладчик завершился со статусом 0. (GDB)

Edit: Хотя причина, кажется, разные, кому-либо, эта цифра может быть полезным в будущем.

ответ

1

Разделение на ноль не вызывает исключения на C++. См. this question.

1

Я уверен, что обработка исключений включена по умолчанию, но я не думаю, что деление на ноль фактически генерирует исключение. Если вы хотите, чтобы они были на этом, просто перейдите в свой проект или целевые настройки и выполните поиск «исключения»; есть флажок «Включить исключения C++».

+0

Спасибо за информацию. Он включен по умолчанию. Причина этого в обсуждении выше. – Mahesh

1

Исключение ЦП, такое как арифметическое исключение, такое как деление на ноль выше, не является исключением C++. Люди, которые когда-либо использовали Microsoft Visual C++, часто путаются этим, так как Microsoft добавила нестандартное расширение, которое позволяет исключениям процессора рассматриваться как исключения C++, но это не является нормой и, конечно, не переносимо.

0

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

Нет: EXC_ARITHMETIC (devision by 0) не является исключением, это сигнал, поэтому для обработки этого сигнала вам необходимо использовать обработчики сигналов.

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