如1:
CBitmap* pbmpOld = NULL;
pbmpOld = new CBitmap();
ASSERT(pbmpOld != NULL);在调试运行的时候,可以检查出是否new了。
那在release 版本中,怎么知道已正确的new 了呢?如2:
TRACE,怎么用呢?能举例吗?还有什么TRACE0,TRACE1都是什么意思呢?如3:
为什么有的函数前要加::
::WaitForSingleObject(...);
::PostMessage(...);
那么什么时候该加,什么时候不用加呢?谢谢!

解决方案 »

  1.   

    TRACE
    TRACE(exp)
    说明:
    把一个格式化字符串送到转储设备,例如,文件或调试监视器,而提供与printf相似的功能。同MS_DOS下C程序的printf一样,TRACE宏是一个在程序运行时跟踪变量值的方便形式。在DEBUG环境中,TRACE宏输出到afxDump。在Release版中他不做任何工作。
    注释:
    此宏只在MFC的DEBUG版中有效。
      
    TRACE0
    TRACE0(exp)
    说明:
    与TRACE相似,但他把跟踪字符串放在代码段中,而不是DGROUP,因此使用少的DGROUP空间。TRACE0是一组跟踪宏的一个变体,这些宏可用于调试输出。这一组包括TRACE0,TRACE1,TRACE2和TRACE3,这些宏不同在于所取参数的数目不同。TRACE0只取一个格式化字符串并可用于简单文本消息。TRACE1取一格式化字符串加上一个变量——一个将转储的变量。同样,TRACE2,TRACE3分别取2个或3个参数(在格式化字符串之后)。如果用户以便以了应用程序的发行版,那么它只把数据转储到afxDump。
    注释:
    此宏只在MFC的DEBUG中有效。
      
      
    TRACE1
    TRACE1(exp,param1)
    说明:
    参见TRACE0
      
    TRACE2
    TRACE2(exp,param1,param2)
    说明:
    参见TRACE0
      
    TRACE3
    TRACE3(exp,param1,param2,param3)
    说明:ASSERT
    ASSERT(booleanExpression)
    说明:
    计算变量的值。如果结构的值为0,那么此宏便打印一个诊断消息并且成讯运行失败。如果条件为非0,那么什么也不做。 诊断消息的形式为: assertion failed in file in line 其中name是元文件名,num是源文件中运行失败的中断号。 在Release版中,ASSERT不计算表达式的值也就不中断程序。如果必须计算此表达式的值且不管环境如何那么用VERIFY代替ASSERT。
    注释:
    ASSERT只能在Debug版中用
      

  2.   

    调试正常了,为了提高执行效率,在release版中就没有必要用了呀
    前有::的函数很多是API函数
      

  3.   

    ::是全局变量说明符,除了::能调用API函数之外,你在程序中的全局函数也可以类似调用!
      

  4.   

    我自己设计的类库里有个Find()函数,
    而我include 的一个头文件中也有这个函数,
    我就用::表示来引用头文件中的这个函数了.ASSERT(pbmpOld != NULL);
    你改成if(pbmpold!=NULL)这样就在发行版本中也能用了.trace()
    就是说程序运行到一个地方时候向你汇报一下"我已安全抵达某处,"