C语言宏定义(高级篇)

上传人:我*** 文档编号:136635602 上传时间:2020-06-30 格式:PPT 页数:19 大小:120KB
返回 下载 相关 举报
C语言宏定义(高级篇)_第1页
第1页 / 共19页
C语言宏定义(高级篇)_第2页
第2页 / 共19页
C语言宏定义(高级篇)_第3页
第3页 / 共19页
C语言宏定义(高级篇)_第4页
第4页 / 共19页
C语言宏定义(高级篇)_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C语言宏定义(高级篇)》由会员分享,可在线阅读,更多相关《C语言宏定义(高级篇)(19页珍藏版)》请在金锄头文库上搜索。

1、1,补充(三) 宏 编程 #define 仅是简单替换,而不是作为一个量来使用。,4,简单函数的定义,#define MAX(x, y) (x) (y) ? (x) : (y) 定义简单的函数,便于调用。 注意括号的使用。 不同于inline类型的函数。 仅是简单替换,编译阶段,不检查语法;,5,单行宏的定义,定义单行宏,有下列三种方式: 前加#或后加#,将标记作为一个合法的标识符的一部分。注意,不是字符串。例如: #define A(x) T_#x 则 int A(1) = 10; / 等效于int T_1 = 10; #define A(x) Tx#_ 则 int A(1) = 10; /

2、 等效于int T1_ = 10; 前加#,将标记转换为相应的字符,注意:仅对单一标记转换有效。如: #define B(x) #x 则B(a)即 a,B(1)即 1。但B(abc)无效。 前加#,将标记转换为字符串。如: #define C(x) #x 则C(1+1) 即 “1+1”。,6,多行宏的定义,#define DECLARE_RTTI(thisClass, superClass) virtual const char* GetClassName() const return #thisClass; static int isTypeOf(const char* type) if(!

3、strcmp(#thisClass, type) return 1; return superClass:isTypeOf(type); virtual int isA(const char* type) return thisClass:isTypeOf(type); static thisClass* SafeDownCast(DitkObject* o) if(o ,注意斜杠的使用,最后一行不能用斜杠。,7,条件编译的定义,#ifndef _AAA_H #define _AAA_H /c/c+代码 #endif 可根据编译条件选择不同的程序代码执行。 可嵌套定义。,8,宏定义举例(一),

4、#define MAKE_COMPONENT( C ) ( (IW3D#C*)MakeComponent( #C ) ) 则,IW3DScene* pScene = MAKE_COMPONENT( Scene );将被理解为: pScene = (IW3DScene *)MakeComponent(Scene);,9,宏定义举例(二),#define IMPLEMENT_COMPONENT( I, C ) static IComponent* Component_Factory_#C() return new I; ComponentInfo Component_#C = #C, Compon

5、ent_Factory_#C ;,10,宏定义举例(三),#define SINGLETON_COMPONENT( I ) private: static I* ms_pSingleton; public: static I* GetSingleton() return ms_pSingleton; void SetSingleton() ms_pSingleton = this; void Release() ms_pSingleton = NULL; IComponent:Release(); ,11,宏定义举例(四),#define IMPLEMENT_SINGLETON_COMPONE

6、NT( I, C ) I* I:ms_pSingleton = NULL; static IComponent* Component_Factory_#C() if( I:GetSingleton() ) return I:GetSingleton(); I* pCom = new I; Assert( pCom ); pCom-SetSingleton(); return pCom; ComponentInfo Component_#C = #C, Component_Factory_#C ;,12,宏定义举例(五),#ifdef _DEBUG #define UNDER_MEMORY_MG

7、R( C ) void* operator new( unsigned int size ) char szFile256; strcpy( szFile, _FILE_ ); strcat( szFile, - ); strcat( szFile, #C ); return GlobalMemory.Alloc( size, szFile, _LINE_ ); void operator delete( void* ptr ) _MemFree( ptr ); #else #define UNDER_MEMORY_MGR( C ) void* operator new( unsigned i

8、nt size ) return _MemAlloc( size ); void operator delete( void* ptr ) _MemFree( ptr ); #endif,13,宏定义举例(六),#ifdef _DEBUG #define CHECK_PTR_RETURN( ptr ) if( NULL = (ptr) ) Assert( 0 ); return FALSE; #else #define CHECK_PTR_RETURN( ptr ) if( NULL = (ptr) ) return FALSE; #endif / #ifdef _DEBUG,14,宏定义举例

9、(应用),class IComponent public: UNDER_MEMORY_MGR( IComponent ); IComponent() : m_nReferenceCount( 0 ) / / IComponent() / protected: virtual IComponent() /IComponent private: int m_nReferenceCount; /RemoveItem( ); m_pWorld -RemoveEffect( ); m_pWorld -Draw( );,18,常用调试技巧,请参考程序演示,结合程序示例讲解常用的调试技术: Console 方式 Logger File 方式 MessageBox 方式 定制全局调试与软件日志工具,提供DEBUG_OUT 和 ASSERT。,19,小 结,C+中提供的宏具有非常强大的功能,在软件开发过程中巧妙的运用它,可实现软件代码级的简化、封装和重用。 在软件开发过程中,需要定制各种小工具,实现模块公共功能的复用和易用,其中编码过程中的Bug调试工具就是非常重要的一种类型。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号