如果满足某个条件,我希望我的C ++代码停止运行,但我不知道该怎么做。因此,只要if
语句为真,就可以在任何时候终止代码:
if (x==1)
{
kill code;
}
答案 0 :(得分:57)
正如马丁·约克所提到的那样,退出并没有像返回那样进行必要的清理。
在出口处使用返回总是更好。 如果您不在主要地方,无论您想要退出该计划,请先返回主页。
考虑下面的例子。 使用以下程序,将使用提及的内容创建文件。 但如果回复被评论&如果没有注释exit(0),编译器不会向您保证该文件将具有所需的文本。
int main()
{
ofstream os("out.txt");
os << "Hello, Can you see me!\n";
return(0);
//exit(0);
}
不仅仅是这样,在程序中有多个退出点会使调试更难。 只有在可以证明其合理性时才使用exit。
答案 1 :(得分:37)
调用std::exit
功能。
答案 2 :(得分:23)
人们说“呼叫退出(返回代码)”,但这是不好的形式。在小程序中它很好,但是有很多问题:
真的,唯一一次你应该退出问题的是main.cpp中的这一行:
return 0;
如果使用exit()来处理错误,则应该了解异常(和嵌套异常),这是一种更优雅,更安全的方法。
答案 3 :(得分:14)
return 0;
在int main()
范围内将其放在任何位置,程序将立即关闭。
答案 4 :(得分:11)
从main
返回值或使用exit
功能。两者都采取int。除非您有外部流程监视返回值,否则返回的值并不重要。
答案 5 :(得分:11)
当执行流程到达主函数结束时,程序将终止。
要在此之前终止它,可以使用exit(int status)函数,其中status是返回到启动程序的任何值的值。 0通常表示非错误状态
答案 6 :(得分:11)
如果代码中某处有错误,则抛出异常或设置错误代码。抛出异常而不是设置错误代码总是更好。
答案 7 :(得分:9)
通常,您会将exit()
方法与适当的exit status一起使用。
零意味着成功运行。非零状态表示发生了某种问题。父进程(例如shell脚本)使用此退出代码来确定进程是否已成功运行。
答案 8 :(得分:7)
超出调用exit(error_code) - 调用atexit处理程序,但不调用RAII析构函数等。 - 我越来越多地使用例外。
我的主程序越来越像
int main(int argc, char** argv)
{
try {
exit( secondary_main(argc, argv );
}
catch(...) {
// optionally, print something like "unexpected or unknown exception caught by main"
exit(1);
}
}
其中secondary_main 在最初放置所有东西的地方 - 即原始主服务器重命名为secondary_main,并添加上面的存根主服务器。 这只是一个非常好的,因此托盘和主要托盘之间的代码不会太多。
如果需要,请捕捉其他异常类型 我非常喜欢捕获字符串错误类型,如std :: string或char *,并打印它们 在main中的catch处理程序中。
使用这样的异常至少允许调用RAII析构函数,以便它们可以进行清理。这可能是愉快和有用的。
总体而言,C错误处理 - 退出和信号 - 以及C ++错误处理 - 尝试/捕获/抛出异常 - 最多不一致地一起玩。
然后,您在哪里检测到错误
throw "error message"
或更具体的异常类型。
答案 9 :(得分:-1)
如果你的if语句在循环中你可以使用
break;
如果你想逃避一些代码&amp;继续循环使用:
继续;
如果您的if语句不在循环中您可以使用:
return 0;
Or
exit();
答案 10 :(得分:-1)
要破坏条件,请使用return(0);
所以,在你的情况下,它将是:
if(x==1)
{
return 0;
}
答案 11 :(得分:-2)
Dude ... exit()
函数在stdlib.h下定义
所以你需要添加一个预处理器。
将include stdlib.h
放入标题部分
然后在任何你喜欢的地方使用exit();
,但记得在退出的括号中加上一个整数。
例如:
exit(0);
答案 12 :(得分:-2)
如果我测试的条件真的是坏消息,我这样做:
*(int*) NULL= 0;
这给了我一个很好的coredump,我可以从中检查情况。