美文网首页
C-宏的一些常用使用

C-宏的一些常用使用

作者: 金牛茶馆 | 来源:发表于2019-04-25 20:02 被阅读0次

    常用:

    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    //定义类型的别名
    typedef unsigned char byte;
    typedef unsigned short word;
    
    //获得一个变量的地址(byte或word宽度)
    #define B_PTR(var)  (byte*)((void *)(&var))
    #define W_PTR(var)  (word*)((void *)(&var))
    
    //得到指定地址上的一个字节或字
    #define MEN_B(arr) *((byte*)arr)
    #define MEN_W(arr) *((word*)arr)
    
    //得到一个字的高位和低位字节
    #define  WORD_LO(xxx)  ((byte) ((word)(xxx) & 255)) // == &0xff
    #define  WORD_HI(xxx)  ((byte) ((word)(xxx) >> 8))  // == /256
    
    //获得结构体成员在结构体中偏移量
    #define STRUCT_MEN_POS(type,member) (unsigned int)&((type *)0)->member
    //得到一个结构体中成员变量所占用的字节数
    #define STRUCT_MEN_SIZE(type,member) sizeof( ((type*)0)->member )
    
    //返回数组元素的个数
    #define ARR_SIZE(arr) sizeof(arr)/sizeof(arr[0])
    
    //使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起
    #define STR(s) #s
    #define STR2(a,b) a##b
    
    struct student
    {
        char name[10];
        int age;
        int id;
    } my_student;
    
    int main(void)
    {
        int a = 23;
    
        //获得一个变量的地址: 0X28FEA8
        cout << W_PTR(a) <<endl;
        //得到指定地址上的一个字: 23
        cout << MEN_W(W_PTR(a)) <<endl;
    
        //获得结构体成员在结构体中偏移量: 12 (要求为4的整数倍)
        cout << STRUCT_MEN_POS(struct student,age) << endl;
        //得到一个结构体中成员变量所占用的字节数: 10
        cout << STRUCT_MEN_SIZE(struct student,name) << endl; //10
    
        //使用#把宏参数变为一个字符串: abc
        cout << STR(abc) << endl;
        //用##把两个宏参数贴合在一起: 234
        cout << STR2(2,34) << endl;
    }
    
    • 本文作者:Jack Yao
    • 本文链接: c_macro
    • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

    相关文章

      网友评论

          本文标题:C-宏的一些常用使用

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