美文网首页
C++ 宏定义

C++ 宏定义

作者: In_Sun | 来源:发表于2018-03-15 23:12 被阅读0次

    define 中的三个特殊的符号

    1. #define Conn(x,y) x##y
    ## 表示x连接y
    int n = Conn(123,456); // 结果就是 n = 123456
    char *str = Conn("abc","def"); // 结果就是 str = "abcdef" 
    
    1. #define ToChar(x) #@x
    #@ 给目标加上单引号
    char a = ToChar(1); // a = '1'
    
    1. #define ToString #x
    ## 给目标加上双引号
    char *str = ToString(123); // str = "123";
    

    常用的宏定义

    // macro.h
    #ifndef MACRO_H
    #define MACRO_H
    
    // 获取指针指向的第一个字节
    #define MEM_B(x) (*((*byte)(x)))  
    // 获取指针指向的前两个字节
    #define MEM_W(x) (*((*word)(x)))  
    
    // 得到一个field在一个struct中的偏移量
    #define OFFSETOF(type,field) ((size_t)&((type*)0)->(field))   
    // 得到一个field在一个struct中的所占用的字节数
    #define FSIZ(type,field) sizeof(((type*)0)->field)            
    
    // 得到一个变量的地址
    #define B_PTR(var) ((byte*)(void *)&(var))
    // 得到一个变量的地址
    #define W_PTR(var) ((word*)(void *)&(var))  
    
    // 将一个字母转化为大写
    #define UPCASE(c) (((c)> 'a'&&(c)< 'z')?((c)-0x20):(c))  
    
    // 判断一个字符是不是十进制数值
    #define DECCHK(c) ((c) >= ''0'' && (c) <= ''9'')
    // 判断一个字符是不是十六进制数值          
    #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]) ) )              
    
    #endif
    

    使用一些宏跟踪调试

    ANSI标准说明了五个预定义的宏名。它们是:

    _LINE_ /*(两个下划线),对应%d*/
    _FILE_ /*对应%s*/
    _DATE_ /*对应%s*/
    _TIME_ /*对应%s*/
    _STDC_
    
    

    条件编译

    #ifdef 标识符
    程序段1
    #else
    程序段2
    #endif
    
    #ifdef
    程序段
    #endif
    
    #if 条件1
    程序段1
    #elif 条件2
    程序段2
    #elif 条件3
    程序段3
    #endif
    

    相关文章

      网友评论

          本文标题:C++ 宏定义

          本文链接:https://www.haomeiwen.com/subject/rxvfqftx.html