想想...在那里,我很乐意在一个MFC谜语环境中编程多年,只要看起来没问题就使用ASSERT(),就在今天我偶然发现了VERIFY宏: http://msdn.microsoft.com/en-us/library/fcatwy09%28v=VS.71%29.aspx
它与ASSERT()基本相同,只是在发布版本中不会删除表达式( check 将会,但表达式仍会被评估)。 / p>
#ifdef _DEBUG
#define VERIFY(f) ASSERT(f)
#else // _DEBUG
#define VERIFY(f) ((void)(f))
我可以看到它的一些用途,但我想知道其他人是否经常在他们的代码库中使用它,以及是否有人看到使用它的任何不良副作用。
欢呼声。
答案 0 :(得分:3)
答案 1 :(得分:2)
在15年前的第一次编程演出中,我设法加快了现有项目的速度。他们的代码中有大量的ASSERT
s,但依赖于副作用。这意味着他们只能构建调试版本,他们的程序将停止在发布模式下工作。我刚刚用ASSERT
s替换了所有VERIFY
。
答案 2 :(得分:1)
假设你有这样的代码:
...
const int optional_return_value = AnyOldFunctionOrMethod(params);
ASSERT(optional_return_value == 42);
}
这将在发布版本中提供warning C4189: 'optional_return_value' : local variable is initialized but not referenced
。
VERIFY宏可以通过在VERIFY宏中的一行(如Will suggested in his answer)上执行函数调用+检查,或者在校验行中仅使用VERIFY而不是ASSERT来避免这种情况。