2

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

只是项目描述中指定exit()使用exit会降低分数。我理解它要求我通过指针运行代码并在函数的返回值中返回错误。我对实践更感兴趣。只为我自己。

4

2 回答 2

8

认为您误解了要求:他们可能说了类似do not use exit(). 这并不意味着你应该实现你自己的exit(),恰恰相反:它们可能意味着你的程序的唯一退出点应该是你的 main 函数的结尾(或 main 函数中的 return 语句),它被认为是良好的编程风格。

于 2012-11-30T19:57:09.440 回答
1

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

还有其他“技巧”可以让您的程序在不exit()显式调用的情况下中止,但这些只是技巧,不应在生产代码中使用。

  1. 使用 C 链接创建 C++ 函数并引发异常

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

  2. signal()使用 SIGKILL调用

  3. 称呼abort()

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

于 2015-04-28T22:28:08.757 回答