宏的一些常用使用
Posted fengMisaka
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宏的一些常用使用相关的知识,希望对你有一定的参考价值。
#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; }
以上是关于宏的一些常用使用的主要内容,如果未能解决你的问题,请参考以下文章