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



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

可以处理SIGABRT信号并进行清洗。当然assert只是用于调试应用程序,所以最好直接修复导致失败的问题,而不是编写优雅地失败的代码。

assert的全部意义在于转储__FILE____LINE__信息并立即调用abort()。如果不想这样做,可以使用清理处理程序进行自己的错误检查,或者按照另一个答案中的建议进行检查,并捕获abort()本身。对于你的具体问题,assert只是一个宏,所以你不能直接挂钩它。章节和节,参见ISO C99, 7.2.1, p2

最新更新