`
墙头上一根草
  • 浏览: 155192 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

c++ 宏定义

    博客分类:
  • c++
阅读更多

 

c++ 的宏定义 有助于提高开发的效率,方便快捷,并且提高程序的执行效率

 

宏可以定义一个带参数的宏  或者 不带参数的宏

 

 带参数的宏定义  宏名和参数之间一定不能有空格,否则参数会被当做宏体处理

 

 带参数宏定义:#define <宏名>(<参数表>) <宏体>

   eg:#define SUB(a,b) a-b 

             result=SUB(2, 3);
             则被替换为:result=2-3;
 
不带参数的定义 :就是将标识符定义为一个字符串
   eg:#define PI 3.14159265
 
以上讲的都是单行的宏定义,宏可以被定义为多行的宏,在每行结束时,使用续行符 "\"结
束,并在该符号后按下回车键,最后一行除外。
 
宏定义举例:
定义命名空间的宏
      #ifdef __cplusplus
    #define NS_CC_BEGIN                     namespace cocos2d {
    #define NS_CC_END                       }
    #define USING_NS_CC                     using namespace cocos2d
#else
    #define NS_CC_BEGIN
    #define NS_CC_END
    #define USING_NS_CC
#endif
  
定义一个方法,该方法就是创建一个类型的指针,负责创建于销毁,在这里是多行的宏定义,所以使用"\"作为每行的结束
   /**
 * define a create function for a specific type, such as CCLayer
 * @__TYPE__ class type to add create(), such as CCLayer
 */
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
    __TYPE__ *pRet = new __TYPE__(); \
    if (pRet && pRet->init()) \
    { \
        pRet->autorelease(); \
        return pRet; \
    } \
    else \
    { \
        delete pRet; \
        pRet = NULL; \
        return NULL; \
    } \
}
 按条件定义宏  ,即按条件给宏参数赋予不同的字符串的值
 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM ==    CC_PLATFORM_EMSCRIPTEN) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
    #define CC_ENABLE_CACHE_TEXTURE_DATA       1
#else
    #define CC_ENABLE_CACHE_TEXTURE_DATA       0
#endif

 这个宏声明了一个protected 属性变量,使用CC_PROPERTY声明的变量可以使用getter获取变量的值,使用setter设置变量的值,当然可以通过此方法声明一个private的属性变量宏,用法一样

  #define CC_PROPERTY(varType, varName, funName)\
protected: varType varName;\
public: virtual varType get##funName(void);\
public: virtual void set##funName(varType var);

 

  具体的用法为:

   #ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
USING_NS_CC;
using namespace std;

class HelloWorld : public CCLayer
{
public:
    virtual bool init();
    static CCScene* scene();
    CREATE_FUNC(HelloWorld);
   
    CC_PROPERTY(unsigned int, _heroID, HeroID);
    CC_PROPERTY(string, _heroName, HeroName);
};
#endif // __HELLOWORLD_SCENE_H__

 

定义一个函数用于生成一个类的实例

 

#define TESTLAYER_CREATE_FUNC(className) \
static CCLayer* create##className() \
{ return new className(); }

定义一个函数用于生成一个类的实例同时调用上面的方法


#define CF(className) create##className

 

  在这里需要注意的是,定义的get和set方法必须要重写 才能使用,因为他们的格式为virtual

 

以上所有的宏定义都是参考cocos2dx的源码定义,cocos2dx中定义了非常多的宏,来提高开发效率和程序性能,有兴趣的可以读一下cocos2dx的代码

分享到:
评论

相关推荐

    C++宏定义说明(详解)

    ### C++宏定义详解 #### 一、宏定义概述 宏定义是C++语言中预处理器的一种特性,它允许开发者创建简单的文本替换规则。通过宏定义,开发者可以在编译前阶段将特定的文本模式(宏名)替换为另一段文本(宏定义的...

    c/c++宏定义 宏定义的入门教材 基础

    ### C/C++宏定义基础知识详解 #### 一、引言 在C/C++编程语言中,宏定义是一种非常实用的功能,它可以用来简化代码编写过程,提高编程效率,并且有助于代码的可读性和维护性。本文将详细介绍C/C++中的宏定义基础...

    c++宏定义技巧

    根据提供的文档标题、描述以及部分代码内容,我们可以总结出关于C++宏定义的一些实用技巧,特别是涉及到了“#”和“##”的操作符在宏定义中的应用。下面将详细解析这些知识点。 ### C++宏定义基础 在C++中,宏是一...

    【zfind】简单的C/C++宏定义和类定义搜索工具

    zfind是本人写的一个简单的C/C++宏定义和类定义搜索工具,z是左的意思,即本人姓氏。取此名字是因为windows下有find命令,为避免冲突。另外本工具是本人在32位WIN7环境下使用的,其余环境本人不保证兼容。 写此工具...

    C++宏定义的计算器

    新手入门专用,其实只要看我写的代码,就能快速掌握C++了,本人自己写的,代码简单,通俗易懂,老幼皆宜,除此之外更多源码全都由本人原创完成,适合新手,程序员开发着研究。

    C/C++宏定义的可变参数详细解析

    在C/C++编程中,宏定义是一种强大的工具,允许程序员在编译期间替换文本。在1999年的ISO C标准(通常称为C99)中引入了一项新特性,即宏可以拥有可变数量的参数,这极大地扩展了宏的使用范围。这种功能使得宏在某些...

    C++中各种颜色宏定义

    平常在开发的时候会用到各种颜色RGB值定义,很多时候需要到绘图里查看各颜色的RGB值。该头文件把各种颜色进行了宏定义,使用时只要包含该头文件即可。 不仅能够加快开发速度,还能使颜色值更加明了,方便阅读代码。

    c与c++头文件兼容宏定义

    ### c与c++头文件兼容宏定义 #### 概述 在软件开发过程中,经常会遇到C和C++代码需要互相调用的情况。由于C和C++编译方式的不同,这通常会导致链接错误或其他编译问题。为了确保这两种语言能够顺利地进行函数调用...

    函数模板与宏定义

    在C++中,函数模板通常是推荐的代码复用手段,因为它能够更好地利用编译器的智能,同时避免了宏定义的一些潜在问题。然而,在某些特定情况下,如简单的文本替换或性能关键的代码段,宏定义仍有其存在价值。理解并...

    宏定义 数据结构 C++/C 面试题

    在IT领域,尤其是在C++和C编程中,数据结构与宏定义是两个极其重要的概念,它们经常出现在面试题中,以考察候选人的基础知识和实际应用能力。数据结构是计算机科学的基础,它涉及到如何有效地存储和组织数据,以便于...

    C++ 常用宏定义

    ### C++ 常用宏定义详解 #### 防止一个头文件被重复包含 在C++编程中,为了防止一个头文件被多次包含而导致的编译错误,通常会在头文件的开头和结尾处使用预处理器指令来实现。例如: ```cpp #ifndef COMDEF_H #...

    ARM 编译器为 C 和 C++ 预定义的宏

    在提供的文档"arminfo.doc"中,应该包含了更详尽的关于ARM编译器预定义宏的信息,包括具体的宏定义、用法示例以及可能的注意事项。建议详细阅读这份文档,以获取更全面的了解和实践指导。通过深入理解和熟练运用这些...

    基于C中含有if的宏定义详解

    含有if的宏定义当宏定义中含有 if 时1) 定义如下宏#define DC(p) if( foo(p) )fun(p)用在下面的环境中if(k&gt;n)DC(k);elseDC(n);宏替换后,如下if(k&gt;n)if( foo(k) )fun(k);elseif( foo(n) )fun( n );可见, 原来的 if 和...

    c++宏的使用总结.pdf

    ### C++宏的使用总结 #### 一、概述 本文档详细介绍了C++中的宏使用技巧,涵盖了条件包含、条件编译、定义常量、可变参数宏以及宏的组合等多个方面。通过这些实例,可以帮助读者更好地理解和运用宏,从而提高编程...

    C++/C 宏定义(define)中# ## 的含义

    ### C++/C宏定义(define)中#与##的含义及应用 #### 一、引言 在C++和C语言中,预处理器指令`#define`被广泛用于定义宏,这些宏可以包含简单的替换文本,也可以进行复杂的条件判断和参数处理。本文将详细介绍宏...

    C++十六进制宏的用法详解

    111&001=110 可以定义这样的宏组合成函数的参数 #defineP10x001L//001 #defineP20x002L//010 #defineP30x004L//100 voidFunc(long){} Func(P1|P2); 可以这样判断某位是否是1 由于001与xxx只有两种状态000或001 比如...

    c++ 宏函数定义 例子 vs2012

    在C++编程语言中,宏定义是一种预处理指令,它允许程序员在编译阶段替换文本。宏函数,尽管不等同于C++中的普通函数,但可以用来实现类似的功能,如参数化代码、条件编译等。在Visual Studio 2012(VS2012)环境下...

    vs2008 MSDN 1330错误 cab3.cab

    解决安装vs2008的MSDN的1330错误中,cab3.cab 无效的数字签名的问题

    常见C++笔试题目整理含答案.docx

    4. C++宏定义 在C++中,宏定义是使用#define指令来实现的。宏定义只是简单的文本替换,不经过算术法则的计算。例如,`#define SQR(X) X*X`只是将SQR(X)替换为X*X,而不是计算X的平方。 5. C++常量指针 在C++中,...

Global site tag (gtag.js) - Google Analytics