0

嗨,我正在某些设备上编程。有一些带有此类代码的示例:

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

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

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

在文档中,验证被定义为与断言“相似”。

我的问题是:如果我在模式下构建我的项目Release,上面的语句会发生什么?他们会失去权力吗?还会Verify有影响吗?

为避免上述可能出现的问题,我是否必须通过检查返回值来替换上述代码?

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

3 回答 3

1

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

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

于 2013-10-21T08:45:16.547 回答
0

我假设您的意思是 MFC VERIFY 宏或非常类似的东西。
使用此宏对于发布版本是安全的。该参数在任何情况下都会执行,只是宏本身在发布时什么都不做。
与此相反,在发布版本中完全跳过了 ASSERT 宏,因此不会发生参数的“副作用”。因此,如果实际程序流程需要参数,则使用 VERIFY,而当参数仅用于断言时,则使用 ASSERT。

于 2013-10-21T08:44:08.093 回答
0

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

于 2013-10-21T08:44:35.800 回答