我正在写一个大学项目。用标准 C99 编写。要求之一是缺少exit();功能。是否可以实现类似的功能?我试图制作一个用减号argc调用main的函数来检测退出。这是一个愚蠢的尝试,因为第一个主要继续。
只是项目描述中指定exit()使用exit会降低分数。我理解它要求我通过指针运行代码并在函数的返回值中返回错误。我对实践更感兴趣。只为我自己。
我正在写一个大学项目。用标准 C99 编写。要求之一是缺少exit();功能。是否可以实现类似的功能?我试图制作一个用减号argc调用main的函数来检测退出。这是一个愚蠢的尝试,因为第一个主要继续。
只是项目描述中指定exit()使用exit会降低分数。我理解它要求我通过指针运行代码并在函数的返回值中返回错误。我对实践更感兴趣。只为我自己。
我认为您误解了要求:他们可能说了类似do not use exit()
. 这并不意味着你应该实现你自己的exit()
,恰恰相反:它们可能意味着你的程序的唯一退出点应该是你的 main 函数的结尾(或 main 函数中的 return 语句),它被认为是良好的编程风格。
exit()
是一种系统级工具,如果不知道操作系统如何实现它(Linux?Windows?嵌入式系统?),您就无法自行实现。正如 Daniel Fischer 所提到的,您可以调用abort()
which 基本上会执行与 exit 相同的操作并退出程序。
还有其他“技巧”可以让您的程序在不exit()
显式调用的情况下中止,但这些只是技巧,不应在生产代码中使用。
使用 C 链接创建 C++ 函数并引发异常
extern "C" MyExit() { throw std::exception(); }
signal()
使用 SIGKILL调用
称呼abort()
编写一些汇编代码来展开调用堆栈,直到它到达调用的函数main
并将返回值插入正确的返回寄存器并从那里开始。我不认为你可以在纯 C 中做到这一点,因为 ABI 不能直接访问。但至少这将是唯一不涉及操作系统(仅 ABI)的方法。