代码乱七八糟

时间:2013-10-21 08:36:14

标签: c++ c

嗨,我在某些设备上编程。 有一些样本有这样的代码:

Verify(SomeFunc(argc, argv) == SDK_OK);

Verify(SomeOtherFunction(&st_initialData) == SDK_OK);

Verify(SomeOtherFunction2(x,y) == SDK_OK);

在doc中,Verify被定义为与assert“相似”。

我的问题是:如果我以Release模式构建项目,上述语句会发生什么?他们会失去力量吗? Verify是否会产生任何影响?

为了避免上述可能出现的问题,我是否必须更换上面的代码并检查这样的返回值?:

if(SomeFunc(argc, argv) == SDK_OK)
{
// we are fine
}
else
{
// handle error somehow, such that it is also available in Release mode
}

3 个答案:

答案 0 :(得分:1)

这是不可能的,因为它似乎是你的项目实现Verify,作为一个宏或一个函数。你为什么不看看实施?

话虽如此,MFC框架具有VERIFY宏,类似于ASSERT,区别在于表达式总是被评估,即使在发布版本中也是如此,但是如果结果为表达式是假的。这可能是类似的方法,因为您的示例似乎调用了一些可能影响系统状态的函数。

答案 1 :(得分:0)

我认为你的意思是MFC VERIFY宏或类似的东西 使用此宏对于发布版本是安全的。在任何情况下都会执行该参数,只是宏本身在释放时不执行任何操作 与此相反,ASSERT宏在发布版本中被完全跳过,因此参数的“副作用”不会发生。因此,如果实际程序流需要参数,则使用VERIFY;当参数仅用于断言时,使用ASSERT。

答案 2 :(得分:0)

几乎可以肯定,你不必更换它们。如果您的项目只想删除生产编译中的调用,那么它可能只是直接assert。尝试阅读项目的来源(总是一个好主意),并了解他的宏做什么。