• 常用的宏定义


    // Hex转BCD码
    #define HEX2BCD(x) (((x) % 10) + ((((x) / 10) % 10) << 4))  /*20 -> 20H*/

    // 按照LSB格式把两个字节转化为一个word 
    #define FLIPW(ray) ((((word)(ray)[0])*256)+(ray)[1]) 
    // 按照LSB格式把一个word转化为两个字节 
    #define FLOPW(ray, val) (ray)[0] = ((val) / 256);\
        (ray)[1] = ((val) & 0xFF)
    // 得到一个字的高位和低位字节 
    #define  WORD_LO(xxx)  ((byte) ((word)(var) & 255))
    #define  WORD_HI(xxx)  ((byte) ((word)(var) >> 8)) 

    // 得到指定地址上的一个字节或字
    #define MEM_B(x) (*((BYTE *)(x))) 
    #define MEM_W(x) (*((WORD *)(x))) 

    // 求最大值和最小值 
    #define  MAX( x, y )  ( ((x) > (y)) ? (x) : (y) ) 
    #define  MIN( x, y )  ( ((x) < (y)) ? (x) : (y) )


    // 得到一个field在结构体(struct)中的偏移量 
    #define FPOS(type, field) ((dword)&((type *)0)-> field) 
    // 得到一个结构体中field所占用的字节数 
    #define FSIZ(type, field ) sizeof(((type *)0)->field) 

    // 得到一个变量的地址(word宽度) 
    #define B_PTR(var) ((BYTE *)(void *)&(var)) 
    #define W_PTR(var) ((WORD *)(void *)&(var)) 

    // 将一个字母转换为大写 
    #define UPCASE(c) (((c)>='a' && (c)<='z')?((c)-0x20):(c)) 

    // 判断字符是不是10进值的数字 
    #define DECCHK(c) ((c)>='0' && (c)<='9') 

    // 判断字符是不是16进值的数字 
    #define HEXCHK(c) (((c)>='0' && (c)<='9')||\
        ((c) >= 'A' && (c) <= 'F') ||\
        ((c) >= 'a' && (c) <= 'f') ) 

    // 防止溢出的一个方法 
    #define INC_SAT(val) (val=((val)+1>(val))?(val)+1:(val))  

    // 返回数组元素的个数 
    #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) 

    #undef ARRAY_SIZE
    #define ARRAY_SIZE(a) \
        ((sizeof(a) / sizeof(*(a))) / \
        static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))





    // 计算运行效率
    #include <time.h>

    //开始计时
    #define BEGIN_COUNT(mark) __int64 __begin_count##mark;\
        QueryPerformanceCounter((LARGE_INTEGER*)&__begin_count##mark);\
        ATLTRACE("\nBegin "#mark" ");\

    //计时结束
    #define END_COUNT(mark) __int64 __end_count##mark;\
        QueryPerformanceCounter((LARGE_INTEGER*)&__end_count##mark);\
        __int64 __Frequency##mark;\
        QueryPerformanceFrequency((LARGE_INTEGER*)&__Frequency##mark);\
        double __interval##mark;\
        __interval##mark = __end_count##mark - __begin_count##mark;\
        double __begin##mark;\
        __begin##mark = __begin_count##mark * 1000000 /__Frequency##mark;\
        double  __end##mark;\
        __end##mark   =   __end_count##mark * 1000000 /__Frequency##mark;\
        double   __usec##mark;\
        __usec##mark   =   __interval##mark * 1000 /__Frequency##mark;\
        ATLTRACE("\nEnd "#mark" CPU elapsed time %10.2lf milliseconds\n", __usec##mark);\ 




    #pragma once

    //
    #define PARSE_STRUCT_MALLOC_NORMAL(p,size)\
        p = malloc(size);\
        memset(p,0,size);\

    //
    #define PARSE_STRUCT_FREE(p) p ? free(p) : 0;

    //
    #define BEGIN_STRCUT_FREE(type,p,size)\
        type *pstruct = (type*)p;\
        if( !p ) return;\
        forint i = 0; i < size; i ++ ){\
        type *pItem = (pstruct + i);\
        }\


    #define END_STRUCT_FREE(p) } PARSE_STRUCT_FREE(p);

    // 删除指针
    #define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
    #define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p)=NULL; } }
    #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }

    // 检查指针
    #define SAFE_CHECK(p) VERIFY((p)==NULL);


    // 调试打印
    #ifdef DEBUG 
    #define DEBUGMSG(msg) ATLTRACE(msg); ATLTRACE(" time=%d \n", time(NULL)) 
    #else 
    #define DEBUGMSG(msg)  
    #endif
  • 相关阅读:
    Flash与3D编程探秘(五) 摄像机旋转和移动
    Flash与3D编程探秘(一) Flash与3D空间
    Flash与3D编程探秘(六) 全方位旋转摄像机
    Flash与3D编程探秘(四) 摄像机旋转基础知识
    Flash与3D编程探秘(二) 静态长方体
    奥巴马当选 ALL THINGS ARE POSSIBLE!
    Flash游戏2D反恐精英
    动画编程中关于Time Based和Frame Based运动
    Flash与3D编程探秘(八) 3D物体着色基础知识
    Flash中使用Actionscript画贝塞尔曲线
  • 原文地址:https://www.cnblogs.com/kenter/p/2295745.html
Copyright © 2020-2023  润新知