gpt4 book ai didi

c++ - 断言失败时如何打印附加信息?

转载 作者:IT老高 更新时间:2023-10-28 22:03:41 25 4
gpt4 key购买 nike

如果 assert 失败,通常需要打印出附加信息。一种方法是:

assert(vec.size() > i || 
!(std::cerr << "False: " << vec.size() << ">" << i))

这样,当 assert 失败时会打印出实际尺寸。但它很丑,而且很容易忘记 ! ,这会使断言条件为真,程序将继续。

人们改用什么来打印关于断言失败的附加信息,就像上面一样?

最佳答案

#define ASSERT(condition) { if(!(condition)){ std::cerr << "ASSERT FAILED: " << #condition << " @ " << __FILE__ << " (" << __LINE__ << ")" << std::endl; } }

用法:

ASSERT(vec.size()>1);

结果:

ASSERT FAILED: vec.size()>1 @ main.cpp (17)

您可以根据需要选择将 DebugBreak()exit(-1) 或 waterver 放入宏中。

更新了左右分开的宏:

#define ASSERT(left,operator,right) { if(!((left) operator (right))){ std::cerr << "ASSERT FAILED: " << #left << #operator << #right << " @ " << __FILE__ << " (" << __LINE__ << "). " << #left << "=" << (left) << "; " << #right << "=" << (right) << std::endl; } }

用法:

ASSERT(a,>,b);

结果:

ASSERT FAILED: a>b @ assert2.cpp (8). a=3; b=4

关于c++ - 断言失败时如何打印附加信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2193544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com