我正在使用一个似乎不存在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函数中的特定点。
  • (如果您的嵌入式系统是您的程序是在其上运行的唯一代码),那么您可以调用一些进入错误状态的代码,而不是退出该代码:可能是一个无限循环,可能会闪烁一个LED或表明该状态不正确已经发生了。也许您可以引发重新启动。
  • 10-01 06:37