如1:
CBitmap* pbmpOld = NULL;
pbmpOld = new CBitmap();
ASSERT(pbmpOld != NULL);在调试运行的时候,可以检查出是否new了。
那在release 版本中,怎么知道已正确的new 了呢?如2:
TRACE,怎么用呢?能举例吗?还有什么TRACE0,TRACE1都是什么意思呢?如3:
为什么有的函数前要加::
::WaitForSingleObject(...);
::PostMessage(...);
那么什么时候该加,什么时候不用加呢?谢谢!
CBitmap* pbmpOld = NULL;
pbmpOld = new CBitmap();
ASSERT(pbmpOld != NULL);在调试运行的时候,可以检查出是否new了。
那在release 版本中,怎么知道已正确的new 了呢?如2:
TRACE,怎么用呢?能举例吗?还有什么TRACE0,TRACE1都是什么意思呢?如3:
为什么有的函数前要加::
::WaitForSingleObject(...);
::PostMessage(...);
那么什么时候该加,什么时候不用加呢?谢谢!
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版中用
前有::的函数很多是API函数
而我include 的一个头文件中也有这个函数,
我就用::表示来引用头文件中的这个函数了.ASSERT(pbmpOld != NULL);
你改成if(pbmpold!=NULL)这样就在发行版本中也能用了.trace()
就是说程序运行到一个地方时候向你汇报一下"我已安全抵达某处,"