Исключения и error() функция

Изучаю по книге Страуструпа. Возникла проблема, если писать вот такой код

if (true)
{
	error("ошибка");
}

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

Так а тут нечего исправлять, так и было задумано в программе )

Если запускать не в режиме отладки в VS, то не кинет. Или где-то нажать кнопку, что продолжить. Оно просто для удобства останавливает на всех не пойманных try catch исключениях.

1 лайк

Понял, я попробовал без отладки запустить, теперь пишет так. Я просто хотел чтобы он вывел то что в ковычках написано, а не получается. Как это решить теперь?)
ошибка с++ продолжение

Это тоже что-то отладочное. Наверно нажать Пропустить.

1 лайк

Собирай релизную конфигурацию проекта. Там не будет отладочной части рантайма.

When an exception is not caught and handled by a try-catch block, it is considered an unhandled exception. The behavior of an unhandled exception depends on the operating system. The operating system typically notifies the user that an unhandled exception error has occurred, and the program may crash or display an error message.

1 лайк

Что-то продвинулось, окошка с runtime теперь нету. А может быть знаете, исходя из этих строчек, он должен как-то вывести что в кавычках, или нет?

То что в заголовочном файле

inline void error(const string & s)
{
	throw runtime_error(s);
}
inline void error(const string & s, const string & s2)
{
	error(s + s2);
}
inline void error(const string & s, int i)
{
	ostringstream os;
	os << s << ": " << i;
	error(os.str());
}

То что в моём

#include "std_lib_facilities.h"

int main()
{
	if (true)
	{
		error("ошибкаошибка");
	}
	return 0;
}

И в консоли при запуске Release и без отладки, выводит так:

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

На консоль он это выводить не будет, но один из способов отслеживать необработанные исключения в Windows - это использовать Windows Event Viewer. Это полезно, когда программа будет не консольной а сервисом (сами узнайте что это такое и в чём разница).

Похоже винда это не выводит в консоль. На линуксе (и с gcc, и с clang компиляторами) выводится как-то так:

#include <stdexcept>

int main()
{
    throw std::runtime_error("my error");

    return 0;
}
$ g++ err.cpp -o myapp
$ ./myapp 
terminate called after throwing an instance of 'std::runtime_error'
  what():  my error
Aborted (core dumped)

https://onlinegdb.com/2_8MB85vc

Вообще, возможно, человеку было бы достаточно, если бы ему предложили использовать вместо функции error, поток std::cerr или файл stderr если по-сишному.