У меня есть три бесплатных функции: F0, F1 и F2. F0 вызывает F1, который, в свою очередь, вызывает F2.
F0 и F2 - это функции C ++, где F1 - функция C. F2 предоставляется F1 через: extern "C"
Код для каждой из бесплатных функций следующий:
~~~~ F0.cpp ~~~~
void f0()
{
try
{
f1();
}
catch (...)
{}
}
~~~~ F0.cpp ~~~~
~~~~ F1.c ~~~~
void f1()
{
f2();
}
~~~~ F1.c ~~~~
~~~~ F2.cpp ~~~~
void f2()
{
throw 1
}
~~~~ F2.cpp ~~~~
Вопрос:
Исключение, выброшенное в f2, прогрессирует через f1 и правильно ли зафиксировано в f0?
Или вызывается std :: неожиданно из-за того, что исключение не обрабатывается, или все это должно быть неопределенным поведением? - если да, то где в стандарте говорится об обработке исключений в этом конкретном контексте.
Обратите внимание, что речь идет не об обработке исключений в C, а о том, что происходит в ситуации, когда исключение может проходить через слой C (если вообще) и быть пойманным на вызывающем слое C ++ - и любых возникающих побочных эффектах и т. Д.
throw 1
? - person Paul   schedule 17.01.2020