typedef与#define的区别及取舍

  今天在看郭天祥老师的代码与普中科技的源码的时候发现两者分别采用了#define与typedef两种不同的方式来对数据类型声明与自定义,于是查了一下两者的区别

typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 #define是预处理指令。

#define是C中定义的语法,typedef是C++中定义的语法,二者在C++中可以通用,但#define成了预编译指令,typedef当成语句处理。Typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同。

区别如下

功能:

typedef只能用来定义类型的别名,而#define作为宏定义,可替换任意字符。

作用域:

typedef的作用域类似于定义变量的类型一样,若在main函数前,则相当于全局变量的作用域,若在函数中,则只在所在函数中作用。
#define则没有定义域的限制,只要是定义过的宏,在所有的地方都能使用。

作用时间:

#define作为宏替换,作用在预处理阶段,即编译之前,只进行机械式的字符串替换,而不进行任何检查。而typedef则在编译阶段作用,因此具有类型检查的作用。

总结

  结合上文,不难看出,在对数据类型名进行自定义时,采用typedef更为保险,当然也非一成不变的规律,主要是理解二者的区别,依情况选用。