C语言typedef关键字学习

typedef关键字用来给现有数据类型创建别名。
typedef int size_t;
所以下面的两个定义其实完全相同。
size_t size;
int size;

咦,下面这样定义一个size_t的宏是不是也能达到一样的效果呢?
#define size_t int
在这里,确实define一个数据类型宏能达到同样的目的。

但是typedef和define相比:
define只会在预编译阶段进行简单的替换操作;
typedef则会在编译阶段进行数据类型检查。
所以相比于define,更推荐使用typedef来为现有数据类型创建新的类型别名。

typedef关键字的作用有:
1. 创建易于记忆的类型别名
typedef int size;

2. 对操作系统提供的数据类型进行封装,提供系统无关的数据类型别名。
这样可以写出不依赖于操作系统的应用程序,让应用程序在不同系统之间的移植变得更简单了。

3. 使用typedef可以让callback函数的原型定义变得更简单。
如下定义了一个函数指针的原型是有两个参数,返回值是int类型。
typedef int (*pfunc)(int size, void* pvalue);

关于typedef和const两个关键字结合使用的案例分析。
typedef char* pstr;
char str[10] = "112345";
const pstr p1 = str;
p1++;

如果代码这样写,那么在编译阶段就会报错。
这是因为按照const的修饰规则,它修饰的是pstr这种数据类型的变量p1;
而p1是一根指针,用const修饰了就意味着这个指针不能随便乱动了,
所以编译器才会报错。

通过这个案例,也恰恰说明了typedef和使用define的区别:
typedef不是在预编译阶段做简单的替换动作;
typedef定义了一个新的数据类型,对编译器而言pstr就是一种数据类型。

关于const关键字的用法,可以参考下面这篇文章,

推荐阅读

C++ 隐式类类型转化 Implicit Class-Type Conversions

C语言变长数组之剖析

C语言需要注意的问题

C语言位域的使用及其注意点

C语言中简单的for循环和浮点型变量

《C语言从入门到精通》.(王娣,韩旭 ).[PDF] + DVD视频光盘文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3fb491193a2d3b78101e3f22e0b725ca.html