Clang не работает должным образом для исключений C ++ - PullRequest
2 голосов
/ 13 сентября 2011
struct ZeroError{
    int err;
    ZeroError(int e){err = e;}
};


int div(int a,int b)
{
    if (b == 0)throw int(10);
    return a/b;
}


int main()
{
    try{
        int x = div(10,0);
        cout<< x;
    }
    catch(int z){
        cout<<z;
    }

}

, хотя при запуске программы я получаю исключение

прекращение вызова после выброса экземпляра int

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

1 Ответ

1 голос
/ 27 мая 2014

Попробуйте скомпилировать с -fcxx-exceptions.

Небольшая очистка вашего кода, используя div, так как имя функции совпало с именем в stdlib.h Также попытался сделать вывод ошибок более различимым.

#include <iostream>
#include <exception>
using namespace std;

struct ZeroError{
    int err;
    ZeroError(int e){err = e;}
};


int divide(int a,int b)
{
    if (b == 0)throw int(10);
    return a/b;
}


int main()
{
    try{
        int x = divide(10,0);
        cout << x << endl;
    }
    catch(int z){
        cout << "Exception: " << z << endl;
    }
}

Компиляция с флагом, кажется, прекрасно работает:

% clang++ -fcxx-exceptions foo.cc
% ./a.out
Exception: 10

% clang++ --version
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...