define、const、typedef、inline 使用方法
1. const 和 #define 的区别
#define Max 100
const int Max = 100;
-
#define 宏在预处理阶段起作用,简单的文本替换 ,没有类型检查。 而const 有数据类型,需要进行判断,可以避免一些低级错误,在编译、链接中起作用;
-
#define 预处理后,占用代码段空间,const 占用数据段空间;
-
#define 可以通过 #undef 取消某个符号的定义,经行重定义,const 不能重定义 ;
-
#define 的独特功能,可以用来防止文件重复引用;
总结:C++ 中多使用const 修饰常量
2.#define 和 别名typedef 的区别
- typedef 在编译阶段有效,有类型检查的功能, #define 是宏定义,发生在预处理阶段,不进行类型检查;
- 功能差异,typedef 用来定义类型的别名 ,与struct的结合使用
typedef struct PERSON{
char name[64];
int age;
}Person; //Person 为该结构体别名
- 作⽤域不同,#define 没有作⽤域的限制,只要是之前预定义过的宏,在以后的程序中都可以使⽤。
⽽ typedef 有⾃⼰的作⽤域。
3.#define 和 inline 的区别
#define 宏是关键字 inline 是内联函数,有类型检查,相比宏更加安全;
//宏函数为文本替换 ,参数需要添加小括号 ,避免额外错误
#define MAX(left,right) ((left)>(right))?(left):(right)
//内联函数在编译阶段就会在调用内联函数的地方自动展开
//内联函数是一种以空间换时间的做法,但是在代码较长时,或者有递归时不适合使用
inline int MAX(int& a,int &b)
{
return a>b?a:b;
}
总结:内联函数是宏的升级