没有try-catch机制的纯C上的catch异常

没有try-catch机制的纯C上的catch异常,c,exception-handling,callback,crash-dumps,C,Exception Handling,Callback,Crash Dumps,当出现异常时,我需要创建一个转储文件 除了(e){…}之外,是否可以不使用\u try{…}和\u来执行此操作 有没有办法创建回调函数或注册等待系统崩溃的操作 提前感谢。是的,您可以使用信号注册特定信号的回调,包括异常。程序或系统崩溃通常不在C的权限范围内。您必须查看操作系统的设施,以检测和处理这些事情(当然这取决于操作系统) 对于一般意义上的“异常”,旧C中执行异常处理的典型习惯用法是使用goto。你在return语句后面放了一个标签,作为“异常处理程序”,任何检测异常情况的调用都会转到这个标

当出现异常时,我需要创建一个转储文件

除了(e){…}之外,是否可以不使用
\u try{…}
\u来执行此操作

有没有办法创建回调函数或注册等待系统崩溃的操作


提前感谢。

是的,您可以使用
信号
注册特定信号的回调,包括异常。

程序或系统崩溃通常不在C的权限范围内。您必须查看操作系统的设施,以检测和处理这些事情(当然这取决于操作系统)


对于一般意义上的“异常”,旧C中执行异常处理的典型习惯用法是使用
goto
。你在return语句后面放了一个标签,作为“异常处理程序”,任何检测异常情况的调用都会转到这个标签。

如果你想在C中实现自己的异常风格处理,是有的,但是要小心,这是一种黑魔法,如果你不小心的话,这是一种很好的自食其果的方法


对于其他错误,这取决于“异常”的含义。我可以认为,您在调用库函数(在这种情况下,您应该适当地检查返回值)或SEGV时表示错误,在这种情况下,您将得到一个SIGSEGV,并且您的进程将在不久后死亡。您可以编写一个信号处理程序来使用
backtrace()
为您提供线索,但仅此而已。

异常处理的基本功能是在发生错误时将控制权转移到异常处理程序,该处理程序位于当前函数调用层次结构的更高位置。标准C有一种机制来实现这一点:setjmp()和longjmp()。这是两篇关于C语言中异常处理的好文章。如果您使用Microsoft Visual C,请查看C语言的一个扩展,它使应用程序能够在通常终止执行的事件发生时控制程序。

您的意思是什么?你有指南或链接吗?@eladyanai22这对我来说很复杂,但有些是我如何做到的。非常感谢你!