我很惊讶在发布模式下使用以下代码获得编译错误。
我只有一个DEBUG函数声明
#If DEBUG Then
Private Function DEBUG_Check() As Boolean
'Do some checks
If (checks OK) Return True Else Return False
End Function
#End If
然后在代码中我在Debug.Assert()中使用它,如下所示:
Debug.Assert(DEBUG_Check())
我收到编译错误“未声明DEBUG_Check” 我认为调试Debug.Assert完全从Release compile中删除了吗?
答案 0 :(得分:2)
因为您已将代码包装在编译器标记中:
#If DEBUG Then
#End If
这些标记告诉编译器完全跳过标记中的代码,如果没有定义DEBUG,它不处于发布模式,所以在发布模式下没有像DEBUG_Check()这样的代码。
与后来的评论相关:
http://msdn.microsoft.com/en-us/library/ttcc4x86.aspx
这篇文章是自相矛盾的。有一次它说:
Debug类方法不包含在程序的Release版本中,因此它们不会增加大小或降低发布代码的速度。
然而,后来它说:
在调试器下运行此代码时,断言语句为 已评估,但在发布版本中,未进行比较,因此 没有额外的开销。
我的解释是仍然调用Debug.Assert(params),但是在调试模式下调用了一个空shell方法,而不是调试模式中的函数方法。因此,传递的参数必须仍然有效。