是否可以尝试在静态库(c++)中捕获断言调用?

is it possible to try catch an assert call in a static library(c++)

本文关键字:断言 调用 c++ 静态 是否      更新时间:2023-10-16

是否可以尝试在c++中捕获断言调用?我使用库rapidjson(静态库),它很烦人,因为如果它在json文件中找不到东西,它会调用assert。当我想避免它调用assert并自己做错误处理时

您无法捕获断言,因为它们与异常无关。函数/宏assert(expr)是C语言的一部分,如果提供的表达式求值为false,将以实现定义的方式导致程序终止。

如果您可以访问有问题的库的源代码,使用定义的预处理器宏NDEBUG重新编译它应该禁用所有断言。但请注意,这不会用异常替换断言:assert()将只是被no操作替换,无论所提供的表达式求值为什么。

如果您想要异常(或任何其他类型的有效的错误处理),则必须修改库以满足您的需要。

此外,总是有可能使用另一个符合现代c++设计实践的库。例如,如果您的工具链支持现代c++,则此工具链非常适合。