C语言中的 typedef 关键字
typedef 可能是C代码中最常用的关键字之一了,虽然在平日里经常使用,但是它的功能远比你想象中要强大。
汽车ECU设计

一个菜鸟程序猿的成长之路。116篇原创内容
公众号你是否发现,基本上写的好的代码,作者都喜欢用自己定义的数据类型,而较少直接使用平台数据类型?而这一现象在嵌入式软件中,尤为常见。这是因为不同硬件平台,对数据类型的支持是有差异的。为了减少后期移植的困难,与其处理这些善变的数据类型,不如定义一个通用的抽象数据类型。而这时候,就需要 typedef 大显身手了!
如果我们想要定义一个新类型,很简单!首先你先定义一个该类型的变量,然后再前面再加上 typedef ,就会得到该变量的新类型!
1 int *p;//定义一个int指针p
2 typedef int *p;//定义一个int指针类型p
是不是有点“茅舍顿开”的感觉,int *p 中, p 是一个变量,其类型为 pointer to int。在int *p前面增加一个 typedef 后,p 变为一个 typedef-name,这个 typedef-name 所表示的类型就是 int *p 声明式中 p 的类型(int*)。
说句白话,typedef 让 p 去除了普通变量的身份,摇身一变,变成了 p 的类型的一个 typedef-name 了。相反,如果我们遇到一个 typedef 关键字,只要把它去掉,就会得到一个正常的变量声明。再举个例子。
1 typedef double *Dp;
我们去掉 typedef ,得到正常变量声明 => double *Dp;变量 Dp 的类型为 double*,即 pointer to double;“typedef double Dp”中 Dp 是类型double的一个 typedef-name 。
当然,typedef 最频繁被使用的地方,就是结构体。除了可以抽象数据类型以外,可以在每次定义一个结构体的时候,少写一个关键字 struct(对,程序员就是这么懒!)。
1 typedef struct
2 {
3 int len;
4 int array[5];
5 } SoftArray;
最后,来说一说 typedef 与 #define 的区别。虽然在有的时候,通过关键字 #define 也可以实现自定义抽象类型,但这两者是不同的,尤其是对指针操作的时候。
1 typedef char* PCR1;
2 #define PCR2 char*;
3
4 PCR1 s1, s2;
5 PCR2 s3, s4;
此例中,变量 s1, s2, s3 都被定义为 char* 类型,只有 s4 被定义为 char。而造成这种差异的根本原因:#define 只是简单的文本替换,而 typedef 则是相当于新的类型名。
完
拓展阅读:
历史精华文章集合:
编程 · 目录
上一篇 下一篇
C语言中的 volatile 关键字 负数的存储方式
阅读原文