是否有可能尝试在静态库中捕获一个断言调用(c ++)

时间:2016-08-07 20:44:32

标签: c++ try-catch assert rapidjson

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

1 个答案:

答案 0 :(得分:4)

你无法捕捉断言,因为它们与异常无关。函数/宏assert(expr)是C的一部分,如果提供的表达式求值为false,将以实现定义的方式终止程序。可以找到更多详细信息here

如果您有权访问相关库的源代码,则使用定义的预处理器宏NDEBUG重新编译它应禁用所有断言。请注意,这不会用例外替换断言:assert()只会被no操作替换,无论提供的表达式是什么评估。

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

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