C标准库中assert.h中的assert()是否支持某种失败的断言处理程序?

时间:2013-03-14 00:20:39

标签: c assert libc

通常,当您调用assert(foo())并且断言失败时,程序会自动中止。有没有办法添加某种处理程序,可以在退出之前清理一些资源?

2 个答案:

答案 0 :(得分:3)

您可以处理SIGABRT信号并进行清洁。当然assert只是用于调试应用程序,所以最好只修复导致失败的问题,而不是编写代码来正常失败。

答案 1 :(得分:0)

断言的重点是转储__FILE____LINE__信息并立即调用abort()。如果您不想这样做,请使用清理处理程序滚动您自己的错误检查,或者按照另一个答案中的建议执行并捕获abort()本身。对于您的具体问题,断言只是一个宏,因此您无法直接挂钩。有关章节和经文,请参阅ISO C99,7.2.1,p2。