欢迎来到天天文库
浏览记录
ID:55827772
大小:120.00 KB
页数:19页
时间:2020-06-09
《C语言宏定义(高级篇).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、补充(三)宏编程——#define&常用调试技巧MacroProgrammingUsing#define&GeneralDebugTechnologySpecialIssueforHITMath-071内容简介本部分将主要讲解C++中宏定义的应用——如何利用宏来简化程序设计,实现代码级的简化、封装、重用等。2简单常量的定义#defineN1000定义简单的常量,便于修改。切不可在后面加上分号!等效于constintN=1000;仅是简单替换,而不是作为一个量来使用。3简单函数的定义#defineMAX(x
2、,y)((x)>(y))?(x):(y)定义简单的函数,便于调用。注意括号的使用。不同于inline类型的函数。仅是简单替换,编译阶段,不检查语法;4单行宏的定义定义单行宏,有下列三种方式:前加##或后加##,将标记作为一个合法的标识符的一部分。注意,不是字符串。例如:#defineA(x)T_##x则intA(1)=10;//等效于intT_1=10;#defineA(x)Tx##__则intA(1)=10;//等效于intT1__=10;前加#@,将标记转换为相应的字符,注意:仅对单一标记转换有效。如:
3、#defineB(x)#@x则B(a)即‘a’,B(1)即‘1’。但B(abc)无效。前加#,将标记转换为字符串。如:#defineC(x)#x则C(1+1)即“1+1”。5多行宏的定义#defineDECLARE_RTTI(thisClass,superClass)virtualconstchar*GetClassName()const{return#thisClass;}staticintisTypeOf(constchar*type){if(!strcmp(#thisClass,type)r
4、eturn1;returnsuperClass::isTypeOf(type);}virtualintisA(constchar*type){returnthisClass::isTypeOf(type);}staticthisClass*SafeDownCast(DitkObject*o){if(o&&o->isA(#thisClass))returnstatic_cast(o);returnNULL;}注意斜杠的使用,最后一行不能用斜杠。6条件编译的定义#if
5、ndef_AAA_H#define_AAA_H//c/c++代码#endif可根据编译条件选择不同的程序代码执行。可嵌套定义。7宏定义举例(一)#defineMAKE_COMPONENT(C)((IW3D##C*)MakeComponent(#C))则,IW3DScene*pScene=MAKE_COMPONENT(Scene);将被理解为:pScene=((IW3DScene*)MakeComponent("Scene");8宏定义举例(二)#defineIMPLEMENT_COMPONENT(I,C)
6、staticIComponent*Component_Factory_##C(){returnnewI;}ComponentInfoComponent_##C={#C,Component_Factory_##C};9宏定义举例(三)#defineSINGLETON_COMPONENT(I)private:staticI*ms_pSingleton;public:staticI*GetSingleton(){returnms_pSingleton;}voidSetSingle
7、ton(){ms_pSingleton=this;}voidRelease(){ms_pSingleton=NULL;IComponent::Release();}10宏定义举例(四)#defineIMPLEMENT_SINGLETON_COMPONENT(I,C)I*I::ms_pSingleton=NULL;staticIComponent*Component_Factory_##C(){if(I::GetSingleton()){returnI::GetSingleton(
8、);}I*pCom=newI;Assert(pCom);pCom->SetSingleton();returnpCom;}ComponentInfoComponent_##C={#C,Component_Factory_##C};11宏定义举例(五)#ifdef_DEBUG#defineUNDER_MEMORY_MGR(C)void*operatornew(unsignedintsize)
此文档下载收益归作者所有