一、#define 和const 的区别
const | #define |
定义的带类型的常量 | 定义常数,不带类型 |
带数据类型,进行判断,避免一些低级错误 | 简单的字符串替换,没有类型检查 (可能会导致边界效应) |
在编译、运行时起作用 | 在编译预处理阶段起作用 |
占数据段空间 | 占代码段空间 |
可以调试 | 不能调试 预编译阶段就已经替换掉了 |
不能重定义 | 可以通过#undef 取消某个符号的定义, 再重新定义 |
不能 | 可以用来防止头文件重复引用 |
//边界效应
#define N 2+3 //我们预想的N值是5,我们这样使用N
double a = N/2; //我们预想的a的值是2.5,可实际上a的值是3.5
头文件重复引用的缺点:
- 增加了编译的工作量,降低编译效率;
- 有些头文件重复包含,会引起错误;
//主要把以下代码放在头文件中,可以防止头文件被重复引用
#ifndef xxx//如果没有定义xxx
#define xxx//定义xxx
//这里是你的代码
#endif //结束如果
啊啊