相关疑难解决方法(0)

C++异常会通过C代码安全传播吗?

我有一个C++应用程序调用SQLite(SQLite在C中)sqlite3_exec(),它反过来可以调用我在C++中实现的回调函数.SQLite被编译成静态库.

如果异常转义我的回调,它会通过SQLite的C代码安全地传播到调用sqlite3_exec()的C++代码吗?

c c++ exception-handling exception visual-c++

31
推荐指数
3
解决办法
2985
查看次数

通过C函数调用抛出C++异常

我有三个免费功能: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++层捕获的情况下发生的情况 - 以及任何产生的副作用等.

c c++ exception function undefined-behavior

12
推荐指数
1
解决办法
558
查看次数

C++ / WIndows - 无法捕获异常

我是 windows api 的初学者,所以这里肯定有一些我不明白的地方。在我的主函数中,我使用 try-catch 来捕获所有未捕获的异常,但由于某种原因,我从代码中其他地方抛出的异常永远不会被捕获。我的应用程序使用单个(主)线程。

我这样扔:

throw "ClassName::methodName() - Error message";
Run Code Online (Sandbox Code Playgroud)

并捕获消息循环之外的异常:

try {
    while(GetMessage(args...)) {
        TranslateMessage(args...);
        DispatchMessage(args...);
    }
}
catch( const char * sExc ) {
    ::MessageBox(args...);
}
Run Code Online (Sandbox Code Playgroud)

我首先认为这是类型不匹配的问题,但后来我添加了带有省略号的 catch(...) ,但我仍然什么也没捕获。如果你问,是的,我确信抛出了异常。这不是与某种异步性或类似问题相关的问题吗?

感谢您的帮助 !

c++ windows exception try-catch

4
推荐指数
1
解决办法
2883
查看次数