宏定义
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
相关文章推荐
- IOS第一天多线程-03线程间通信
- 判断文件类型
- oracle 分析函数
- ViewController
- HTML布局relative和absolute
- 如何使用命令查看电脑开放的端口
- sqlite 数据库加密(SQLCipher)
- 使用PHP顶替JS有趣DOM
- IOS第一天多线程-02NSThread基本使用
- php的Judy Array
- Spring源码阅读总结(Ing)
- Gson用法详解
- 【剑指offer】面试题4:替换空格
- C# 创建文件
- Usage of “symmetrical” and “symmetric”
- 编译器的工作过程
- throws 和throw 的范围区别
- 漫谈C指针第十七讲---定义函数的指针类型
- Objective-C基础知识之(四):实例变量的可变度、初始化方法的声明、self和super的具体应用
- 显示 GIF 图片