gpt4 book ai didi

C转到不同的功能

转载 作者:太空狗 更新时间:2023-10-29 14:50:58 26 4
gpt4 key购买 nike

我正在使用一个似乎不存在 exit() 调用的嵌入式系统。

我有一个调用 malloc 的函数,而不是让程序在失败时崩溃,我宁愿更优雅地退出。

我最初的想法是使用 goto,但是标签的范围似乎非常有限(我不确定,在“永远不要使用 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 或以其他方式指示坏事发生了。或许您可以重新启动。

关于C转到不同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13680246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com