如何实现exit()函数的模拟? -std = C99

时间:2012-11-30 19:52:06

标签: c exit c99 termination

我正在写一个大学项目。用标准C99写。其中一个要求是缺少 exit(); 功能。是否可以实现类似的功能? 我尝试使用减去 argc 来创建一个调用 main 的函数来检测退出。这是一次愚蠢的尝试,因为第一个 main 继续。

只是对项目的描述指出,使用exit()退出时,分数会减少。我明白它要求我通过指针运行代码并在函数的返回值中返回一个错误。我对这种做法更感兴趣。只为我自己。

2 个答案:

答案 0 :(得分:8)

认为你误解了这个要求:他们可能会说do not use exit()之类的东西。这并不意味着您应该实现自己的exit(),恰恰相反:它们可能意味着程序的唯一退出点应该是主函数的结束(或者是一个返回语句)主要功能)被认为是良好的编程风格。

答案 1 :(得分:1)

exit()是一个系统级工具,您无法在不知道操作系统如何实现它(Linux?Windows?嵌入式系统?)的情况下自行实现。正如Daniel Fischer所提到的那样,你可以调用abort(),它基本上会执行与退出相同的操作并退出程序。

还有其他" hacks"让你的程序在没有明确调用exit()的情况下中止,但这些只是黑客攻击,不应该在生产代码中使用。

  1. 使用C链接创建C ++函数并抛出异常

    extern" C" MyExit(){throw std :: exception(); }

  2. 使用SIGKILL

  3. 致电signal()
  4. 致电abort()

  5. 编写一些汇编代码来展开调用堆栈,直到它到达调用main的函数并将返回值插入到正确的返回寄存器中并从那里开始。我不认为你可以用纯C做到这一点,因为ABI不能直接访问。但至少这只是不涉及操作系统的方法(只是ABI)。