关于C语言的typedef

Written on September 1, 2008 – 9:41 am | by 陈炬 | 64 views

注:本文的内容只是对自己学习到知识的一些简单总结,并没有考证过C的规范和手册进行求证。

很多文章,甚至于很多教材,对c语言的typedef的解释是有错误的,以致于许多学习C语言的人对typedef的理解往往有偏差。

一种最常见的错误观点是typedef定义了现有类型的一个别名(alias),比如

typedef int EType;/* (1) */

是给int类型取了一个EType的别名。在这种情况下,似乎也能解释的通,但是,如果碰到这样一个typedef定义呢:

typedef int (*f)(double,int); /* (2) */

观其名,识其行,看typedef的名字就明白它的意思是定义类型。typedef不是简单的给现有类型取一个别名,或者简单的进行字符替换,typedef是利用现有的数据类型类定义一个新的类型。比如语句(1),从概念上我们应当认为是定义了一种新的数据类型,只是这种新类型跟int类型是吻合的。而语句(2)定义了一种新的类型f,f这种类型是一个参数为double,int,返回值是int的函数指针类型。

那么如何去分析,识别typedef定义的类型呢?我从Tony Bai的文章中学到了蛮好的方法。方法就是看看去掉typedef之后,剩下的语句中把相应的变量(记为p)变成了什么类型,那么加上typedef之后,这个p就成了这种类型的名字。

举语句(2)的例子,把typedef去掉,原句就成了

int (*f)(double,int); /* (3) */

,这是一个很普通的函数指针的定义,这个时候f就是指向一个参数为double,int返回值为int的函数指针变量,那么加上typedef之后,f就是指向…..的函数指针类型

再举一个通俗的例子,将语句(1)的typedef去掉,就成了

int EType;/* (4) */

我们可以清楚的看到,EType是一个int类型的变量,那么加上typedef,EType实际上就成了一个int类型

Rating: 3.0/5 (15 votes cast)

推荐购买的书籍--都是牛书
  1. 6 个评论 关于 “关于C语言的typedef”

  2. By KingsamChen on Sep 1, 2008 |

    M$在MFC里用typedef定义了一堆新类型。
    而typedef和#define的区别在应用const指针的时候体现的更加明显~

    陈炬 回复说:

    哈,跟我一样的英文名和姓~

    陈炬 回复说:

    ps: typedef 跟 #define 是完全不同的两个东西,相互之间本就没有多大的联系。

  3. By 1moJim on Sep 5, 2008 |

    最近上学了难得来看看不好意思啊
    不错不错,收藏了

    陈炬 回复说:

    看到你转载了,不过似乎代码部分乱掉了。

    1moJim 回复说:

    直接拷了下竟然没注意到粗心了
    订正了…

我来说下

关于

我叫陈炬,正在天津大学计算机学院->知识工程与科学研究所攻读硕士研究生。今年应届。您可以在我的自我介绍获得更多关于我的信息

订阅我的Blog


本站RSS地址| [这是什么?]
订阅到Google Reader | 订阅到 抓虾 阅读器 | 订阅到 鲜果 阅读器

其他blog

我还有一个英文blog,非常的无聊,琐碎,许多的语法错误。请谨慎访问。
Find entries :