Я использую VC2010 и пишу следующий код для проверки функции «set_unexpected»."set_unexpected" не работает в VC2010?
#include <iostream>
#include <exception>
void my_unexpected_handler()
{
std::cout << "unexpected handler" << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
set_unexpected(my_unexpected_handler);
throw 1;
return 0;
}
Однако «my_unexpected_handler» никогда не вызывается (строка не печатается на консоли, я попытался установить точку останова в my_unexpected_handler, не впадать в).
Что случилось с моим кодом?
Благодаря
К сожалению, я не понял неожиданное исключение. Однако, даже если я изменю код на следующий
#include <iostream>
#include <exception>
void my_unexpected_handler()
{
std::cout << "unexpected handler" << std::endl;
}
void func() throw(int)
{
throw 'h';
}
int _tmain(int argc, _TCHAR* argv[])
{
std::set_unexpected(my_unexpected_handler);
func();
return 0;
}
Он все еще не работает? То есть, «my_unexpected_handler» не вызывается.
Этот код не должен даже компилировать. Вам нужно квалифицировать 'set_unexpected' с помощью' std :: '. Отправьте фактический код. Кроме того, вы, вероятно, ищете 'set_terminate', если вы находитесь в' main'. – dirkgently
Обратите внимание на предупреждения: 'предупреждение C4290: спецификация исключений в C++ игнорируется, кроме как для указания функции не __declspec (nothrow)' –