zoukankan      html  css  js  c++  java
  • 宏的一些常用使用

    #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;
    }
  • 相关阅读:
    Linux常用命令-学习笔记
    Linux 输入输出重定向
    Linux 网卡配置参数
    JS Promise对象学习
    Linux用户身份与文件权限学习笔记
    4、点击事件
    3、自定义按压效果
    2、自定义背景形状
    1、文字大小,颜色
    5、跑马灯
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/7726080.html
Copyright © 2011-2022 走看看