Visual C++ MFC 中常用宏的含义
1. ASSERT
ASSERT(booleanExpression)
1.1适用范围
只在DEBUG版中有效,常用来判断指针是否为空。
1.2作用
验证表达式booleanExpression的值。
当表达式的值为false,则输出诊断消息,并且终止程序运行。
1.3 Example
// 判断指针point是否为空
ASSERT (point != NULL);
2. TRACE
TRACE(exp)
2.1 适用范围
只在DEBUG版中有效,常用于调试状态,跟踪多个变量在某个时刻的值。比如,统计或分析不同代码段的执行时间。
2.2作用
当程序在调试状态下多次运行时,跟踪多个变量的值。
2.3 Example
// 跟踪且输出四个变量的值
TRACE(_T("\tVertex %d (%f, %f, %f)\n"), geometricID[k], pCoord[0], pCoord[1], pCoord[2]);
3.TRY和CATCH
CATCH(exception_class,exception_object_pointer_name)
3.1 适用范围
用于文件读写操作或与第三方组件通讯时,捕获并处理其异常。TRY和CATCH一般都成对使用。
3.2 作用
捕获可能发生异常的代码块。
3.3 Example
// 捕获可能发生异常的代码块,并且抛出异常处理
try
{
CaxArchive << pCax;
}
catch (CException *e)
{
e->GetErrorMessage(ErrStr + 5, 120);
AfxMessageBox((LPCTSTR)ErrStr);
}
4. DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC
DECLARE_DYNAMIC(class_name)
IMPLEMENT_DYNAMIC(class_name,base_class_name)
4.1 适用范围
识别从CObject派生的类的类型,比如,在CAD软件的二次开发时,扩展并自定义的类。
4.2作用或说明
当程序运行时,可通过RUNTIME_CLASS宏和CObject::IsKindOf函数识别类的类型。
4.3 Example
// *.h
DECLARE_DYNAMIC(CCax_Curve)
// *.cpp
IMPLEMENT_DYNAMIC(CCax_Curve)