对于Assert宏的使用,我一直有这样的疑问:Assert只是出现在Debug中,当判断的条件不成立时,便会引发一个异常。但时在Release中,Assert是不会起作用的。也就是说,只要Assert所判断的条件在Debug中不会出现了,那么在release中就绝对不会出现。但是有没有可能在Release中出现Assert所判断的条件呢。这个条件的出现并不依赖于是Debug还是Release。如果这样的话,Assert不起作用,程序便会产生不可设想的后果啊。

解决方案 »

  1.   

    Assert的意思是断言,就是说,程序只有在Assert成立的时候才是正常运行,一般用来检查函数的参数的合法性等,运行时的错误检查不应该用它来做
      

  2.   

    那你可以使用 VERIFY ,不过在Release版也不回中断程序的.
      

  3.   

    楼主理解的没有错,不过一个程序做成Release版之前,用Debug版都进行严格的测试,
    如果有问题,在Debug的时候就发现了。确信无误以后再做成Releas版的比较安全!
      

  4.   

    ASSERT的语意应该是这样的:
        ASSERT(条件表达式); 
    若程序执行正确,条件表达式应该为非0
    如果表达式为零或假,那你的程序在某个地方一定有错误.举个例子:比如CWnd的ShowWindow操作
    _AFXWIN_INLINE BOOL CWnd::ShowWindow(int nCmdShow)
    { ASSERT(::IsWindow(m_hWnd)); return ::ShowWindow(m_hWnd, nCmdShow); }
    既然是要显示窗口,那么这个窗口(CWnd::m_hWnd)一定得存在.
    否则(CWnd::m_hWnd无效或为空值)................换句话说:若CWnd::m_hWnd无效或为空,就绝对不会调用CWnd::ShowWindow()
             若调用CWnd::ShowWindows(),那么次窗口一定存在.在调试版,我们的程序有可能出这样那样的错误,所以要用ASSERT等捕获错误.
    而在Release版,上术错误是绝对不允许发生的.