我正在使用一个似乎不存在exit()调用的嵌入式系统。
我有一个调用malloc的函数,而不是让程序失败时不崩溃,我宁愿更优雅地退出。
我最初的想法是使用goto,但是标签的范围似乎非常有限(我不确定,在“Never USE GOTO !! 1 !!”之前,我从未使用过它们)。
我想知道是否有可能转到另一个函数的一部分,或者是否有其他创造性的方法可以从任意函数中退出C程序。
void main() {
//stuff
a();
exit:
return;
}
void a() {
//stuff
//if malloc failed
goto exit;
}
谢谢你的帮助。
最佳答案
选项:
abort()
(警告:这不会调用atexit处理程序)。 a()
返回一个指示错误的值,并通过错误传播该值,一直返回到main
。 setjmp/longjmp
。这些很难正确使用,但是它们确实提供了您所要求的:可以从程序中的任何地方转移执行的功能(不一定包括信号/中断处理程序,但是无论如何您都不会在其中任何一个中调用malloc
)到main
函数中的特定点。