两者使用的目的都是为了重命名,但是内部构造却完全不同。
两者的区别
#define
#define ,把右边的部分全部替换为左边的。在预处理的时候展开,只是进行替换的操作,不会进行语法检查,所以使用的时候应该注意写法的错误。
#define my_data 10
#define ADD(x,y) (x+y)
如图, my_data 就是等同于 10
ADD(x,y) 就 等同 为 (x+y)
只是起到了替代的作用,没有其他。如上可以看到我(x+y) 是加了括号的,以为替代的时候不会自动加括号,这是初学者最容易放错的点!!
比如我写: 3*ADD(1,2) 替换就是: 3*(1+2)
但是如果没括号:
#define ADD(x,y) x+y
3*ADD(1+2) //替换变成-> 3*1+2 = 5
再次强调! 因为是直接替换,不就是原原本本替换,不会给你主动加括号之类的!!!!
typedef
typedef是进行语法检查之后再放入语句中, 但是其作用只是局限于对已经存在的数据类型起别名。
tyedef int my_int ;
typedef char* my_point;
如上, int 和 my_int 是一模一样的,之所以这样做是为了方便代码的读取。让看代码的人更直观方便,也方便代码的编写。 char* 也跟 my_point 是等同的。
总结
typedef 用于对不同的数据类型起别名
#define 主要用于对一些代码的简洁找替代写法 以及让代码更直观
注意点:
typedef 定义后要加分号 ; define 不能加!!!!