嗨,我在某些设备上编程。 有一些样本有这样的代码:
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
}
答案 0 :(得分:1)
这是不可能的,因为它似乎是你的项目实现Verify
,作为一个宏或一个函数。你为什么不看看实施?
话虽如此,MFC框架具有VERIFY
宏,类似于ASSERT
,区别在于表达式总是被评估,即使在发布版本中也是如此,但是如果结果为表达式是假的。这可能是类似的方法,因为您的示例似乎调用了一些可能影响系统状态的函数。
答案 1 :(得分:0)
我认为你的意思是MFC VERIFY宏或类似的东西 使用此宏对于发布版本是安全的。在任何情况下都会执行该参数,只是宏本身在释放时不执行任何操作 与此相反,ASSERT宏在发布版本中被完全跳过,因此参数的“副作用”不会发生。因此,如果实际程序流需要参数,则使用VERIFY;当参数仅用于断言时,使用ASSERT。
答案 2 :(得分:0)
几乎可以肯定,你不必更换它们。如果您的项目只想删除生产编译中的调用,那么它可能只是直接assert
。尝试阅读项目的来源(总是一个好主意),并了解他的宏做什么。