我在Ubuntu 12.04中使用eclipse。我在我的程序中使用了一些例外,当它们被捕获时,它正确地给了我cout。但该计划持续到最后。有没有办法在异常后停止程序?
这是我正在使用的代码:
try{
if(BLER==-1) throw 12;
}catch(int exception){
cout << "ERROR: BLER value is invalid for x= " << x << ", BLER_input= " << BLER_input << ", m= "<< m << endl;
}
答案 0 :(得分:3)
一些解决方案:
如果您在main()例程中执行此操作,请使用函数中的return
(并根据您的返回值执行此操作)
使用exit(n)
,其中n是退出代码(http://www.cplusplus.com/reference/cstdlib/exit/)
abort()
如果这是一个关键问题(http://www.cplusplus.com/reference/cstdlib/abort/)
注意:正如James Kanze所述,exit
和abort
将 NOT 调用本地对象的析构函数。这是值得注意的,因为你正在处理类。
答案 1 :(得分:2)
如果您可以/必须在当前函数中处理问题,您可以(并且应该)在那里终止:
#include <iostream>
#include <cstdlib>
if ( BLER == -1 )
{
std::cout << "BLER value is invalid." << std::endl;
std::exit( EXIT_FAILURE );
}
异常意味着在出现错误情况时抛出,但不知道如何正确处理它。在这种情况下,您抛出一个异常而不是一个整数,可选地指示其构造函数中遇到的问题......
#include <stdexcept>
if ( BLER == -1 )
{
throw std::runtime_exception( "BLER value is invalid" );
}
...并在调用树的某个地方捕获 ,您可以在其中提供更好的错误消息,可以处理问题,重新抛出或终止您的选项)。如果程序根本没有被捕获,则默认情况下只会终止程序(“未处理的异常”);这就是构造的整个想法。
抛出一个整数并在同一函数中捕获它是(ab-)使用异常作为函数内goto
。
答案 2 :(得分:1)
使用函数exit:exit(1);
,其中1是退出代码(通常非零表示错误)。如果您将异常视为严重错误,也可以使用abort()
。
答案 3 :(得分:0)
尝试使用这样的返回命令
return 0 //for successful termination or your preffered int status returned
//or just
return;
//or (C++)
[std::exit]
答案 4 :(得分:0)
要在捕获异常后停止执行程序,只需在catch
块中调用std::exit()
:
#include <cstdlib>
#include <iostream>
int main()
try
{
throw 42;
}
catch(int i)
{
std::cout << "Caught int: " << i << ". Exiting...\n";
std::exit(EXIT_FAILURE);
}
这也适用于main
之外。您可以将EXIT_FAILURE
替换为您想要的任何int
值,portably in the 0-255
range。
答案 5 :(得分:0)
C ++中的catch
处理程序允许人们在代码的正常执行路径之外处理错误。处理完毕后,C ++认为恢复正常操作或程序是安全的。
如果不是这种情况,假设您只想记录错误,则可以自由地重新throw
导致错误的异常进一步向上传播。
如果异常没有被捕获,将调用C ++函数std::terminate
。默认行为是调用abort
。
你可能最好的做法就是通过在catch块的末尾调用throw
来重新抛出exeception。