C语言中typedef与#define宏的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang328452854/article/details/62223518

I.说明

作者:WXP(翱翔云端的鸟)
联系方式:[email protected] || 13100610853(联系请注明CSDN)
申明:个人原创,转载请先经过本人同意!
要说的话:个人水平有限,写之前也看过许多大神的博客,不足之处,还请指正!有疑问欢迎大家联系我交流探讨!

II.typedef与#define

1.typedef最简单的解释就是给类型取别名,表面上理解为把第二个参数等同于第一个参数,然后以后定义某个变量时,可以直接使用第一个变量就可以了
例如

typedef unsigned short uint16_t

这里就是给unsigned short (类型变量)起了一个别名uint16_t,这里的作用主要有两个
A.简化类型,让程序看起来更容易理解(例如看了uint16_t 就知道这个类型是16位无符号类型的)
B.便于程序移植,当在不同平台移植代码的时候,使用平台原生的类型,如果代码量巨大,修改起来很费劲

2.#define是宏定义,用来简单的替换,这个替换的过程是发生在程序预编译过程,它只会理解为用一堆字符替换另一堆字符,这个字符可以使变量类型 也可以是函数

III.typedef与#define宏的区别

这里我们可以定义两个来比较下区别

#define dpchar char*
typedef char* tpchar;
dpchar m1,m2;
tpchar m3,m4;

可以很明显的看出区别
1.define宏是没有分号的 而typedef必须有分号
2.define宏的类型别名在前,而typedef在后

有时看到这两个定义很容易看混淆,不知道是放在前面还是放在后面,这里可以给大家一个记忆方法
使用typedef的时候可以去掉,而且不会有影响,但是#define宏确不可以
例如上面的

#define dpchar char*
typedef char* tpchar;
//去掉#define
dpchar char*
//去掉typedef
char* tpchar;

这里去掉了typedef,语句依然正确

这里要小心,由于#define是直接简单替换的,当连续定义多个变量的时候,很容易弄错

#define dpchar char*
typedef char* tpchar;
dpchar m1,m2;
tpchar m3,m4;

这里#define替换相当于
char *m1,m2;
m1是char*,但是却是char类型

所以定义多个变量或者给类型起别名,最好使用typedef

猜你喜欢

转载自blog.csdn.net/wang328452854/article/details/62223518