您的位置:首页 > 其它

宏定义

2015-09-08 17:55 225 查看

1.宏定义的使用场景

1. 控制条件编译,防止重复包含,一般在.h文件中添加

#define FILENAME_H

然后在每个要包含此文件的位置添加以下语句即可

#ifndef FILENAME_H
#include "FILENAME.h"
#endif

2. 重新封装数据类型,屏蔽平台差异,如

typedef unsigned char byte

3. 定义一些频繁使用而代码简短的函数,减少代码的重复,定义函数时,变量名和函数体必须加括号,如

#define MAX(a,b) ((a)>(b)?(a):(b))

2.几个常见的宏定义

1. 结构体内字段的偏移量

#define OFFSET(s,m) ((size_t)(&((s *)0)->m))

2. 结构体字段的大小

#define SIZEOF(s,m) sizeof(((s *)0)->m)

3. 得到一个字的高\低位字节

#define  WORD_LOW(xxx)  ((byte) ((uint16)(xxx) & 255))
#define  WORD_HIGH(xxx) ((byte) ((uint16)(xxx) >> 8))

3.编译器预定义的宏

1. __FILE__ __DATA__ __LINE__ __TIME__ __STDC__ 主要用于跟踪调试
2. # ## 在宏变量前加#可以直接使用变量名作为字符串

#define STR(v) #v

注意如果v也是一个宏变量,如`#define HIGH 1`,它不会被展开,则STR(HIGH)被替换为HIGH,而不是1
3. ... va_list va_arg va_start va_end 变参宏,用以实现可变参数函数,如printf,定义在头文件stdargs.h
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: