1、const 与 #define 的区别
const
定义的常量是变量带类型,⽽
#define
定义的只是个常数不带类型;
define
只在预处理阶段起作⽤,简单的⽂本替换,⽽
const
在编译、链接过程中起作⽤;
define
只是简单的字符串替换没有类型检查。⽽
const
是有数据类型的,是要进⾏判断的,可以避免⼀些低级错误;
define
预处理后,占⽤代码段空间,
const
占⽤数据段空间;
const
不能重定义,⽽
define
可以通过
#undef
取消某个符号的定义,进⾏重定义;
define
独特功能,⽐如可以⽤来防⽌⽂件重复引⽤。
2、#define 和别名 typedef 的区别
执⾏时间不同,
typedef
在编译阶段有效,
typedef
有类型检查的功能;
#define
是宏定义,发⽣在预处理阶段,
不进⾏类型检查;
功能差异,
typedef
⽤来定义类型的别名,定义与平台⽆关的数据类型,与
struct
的结合使⽤等。
#define
不只是可以为类型取别名,还可以定义常量、变量、编译开关等。
作⽤域不同,
#define
没有作⽤域的限制,只要是之前预定义过的宏,在以后的程序中都可以使⽤。⽽ typedef
有⾃⼰的作⽤域。
3、define 与 inline 的区别
#define
是关键字,
inline
是函数;
宏定义在预处理阶段进⾏⽂本替换,
inline
函数在编译阶段进⾏替换;
inline
函数有类型检查,相⽐宏定义⽐较安全;