У меня есть три свободные функции: 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++ уровне - и любые возникающие побочные эффекты и т.д.