谁在使用MFC的VERIFY Macro?

时间:2010-07-23 11:21:36

标签: c++ visual-c++ mfc

想想...在那里,我很乐意在一个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))

我可以看到它的一些用途,但我想知道其他人是否经常在他们的代码库中使用它,以及是否有人看到使用它的任何不良副作用。

欢呼声。

3 个答案:

答案 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来避免这种情况。