我有三个免费功能: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 ~~~~
Run Code Online (Sandbox Code Playgroud)
题:
是否例外F2抛出的进展,通过F1和F0正确抓到?
或者由于未处理异常而调用std :: unexpected,或者整个事情应该是未定义的行为? - 如果是这样,它在标准中的哪个部分讨论了在这个特定环境中的异常处理.
请注意,这不是关于在C中处理异常,而是在异常可以流经C层(如果有的话)并被调用C++层捕获的情况下发生的情况 - 以及任何产生的副作用等.