c++ - 如何强制中断方法的执行

标签 c++ c exception exit break

我有一个方法:

void doSomethingMain(char* s)
{
   doSomethingElse(s);
   doMoreStuff(s);
}

doSomethingElse() 方法如下:

void doSomethingElse(char* s)
{
   anotherMethod(s);
   moreStuff(s);
}

其中 anotherMethod()moreStuff() 调用其他方法,轮到它们可能返回到 doSomethingElse()moreStuff() 或其他方法...以非常递归的方式,但它们都不调用主要的 doSomethingMain() 方法。这是一个有限递归,它会在 s 被成功消费时结束。这些方法是无效的,我们不能不付出巨大的努力就改变它。

所有这些方法都使用参数 s 并检查 s 中的错误。我想要发生的事情如下:当调用堆栈下方某处的方法之一在其输入参数 (s) 中遇到错误时,我想立即中止发现错误的函数的执行, 然后跳回到 doSomethingMain() 中的 doMoreStuff()

显然,C++ 方法的直接解决方案之一是 throwcatch() 对,并且来自 C 方法是 setjmplongjmp 对...但是我们的单元测试框架不喜欢 throw ... catch 对(它将它们解释为错误)并且我想避免使用 longjmp 方法,所以这里是问题:

为了在方法中中断应用程序的执行流程并在特定位置(方法之后的下一条语句)继续,我们还有哪些其他选择?

最佳答案

您可以更改方法以返回 bool。如果解析成功,则在递归结束时,返回 true 并将其传递给调用函数。如果在任何一点解析被证明不成功,返回false,并在调用函数中测试整个递归的返回值。

However our unit testing framework does not like the throw ... catch pairs (it interprets them as errors, and no more tests are executed after them)

更改您的测试单元框架。

关于c++ - 如何强制中断方法的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212962/

相关文章:

c++ - 在 Mac OS-X 上编译 C++ 程序时出现 "framework not found"

c++ - 如何创建二维矩阵C++的水平镜像逆?

c++ - 使用 g++ 链接编译指示

c - 如何在C程序运行时正确调用可执行文件?

c++ - usleep 是否创建线程取消点?

C 编程数组与函数

c - 尝试检查命令行参数时出现段错误(在 C 中)

c# - 如何在 ASP.NET Web Api 服务中不抛出异常?

c - 纯 C 中的异常处理库

mysql - 引发 MysqlError; raise Mysql::Error 都有效,这是怎么发生的?