嚎叫一声  
让我尝试写一些opengl的东西吧
公告
日历
<2006年2月>
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011
统计
  • 随笔 - 71
  • 文章 - 0
  • 评论 - 201
  • 引用 - 0

导航

与我联系

搜索

 

常用链接

留言簿(17)

我参与的团队

随笔分类

随笔档案

相册

blog

links

宠物

积分与排名

  • 积分 - 52389
  • 排名 - 815

最新评论

阅读排行榜

评论排行榜

 

有网友问到typedef究竟怎么使用?书上有类似typedef A B;的形式表示定义B是类型A的别名。
但却可以看到如
typedef int (*fa[20])(int);
这样'奇怪'的形式居然也正确。

我觉得貌似可以这样说:
任何一个变量定义的形式
AnB;
其中包含变量名n,类型为C,如果改写为:
typedef AnB;
就使得名字n成为类型C的别称。

虽然不能确定它是正确的定义,但我还没有想到反例...

posted on 2006-02-27 20:36 kaikai 阅读(518) 评论(10)  编辑 收藏 所属分类: c/c++语言
评论:
  • #1楼   seeker [未注册用户] Posted @ 2006-02-27 20:48
    typedef 没什么高深的。
    typedef 有2个“变量”。如下面:
    typedef A B;//这里 2 个变量使用空格作为分隔的。
    其中A B 可以为表达式。表达式的定义就是一些字符串(任何有意义的字符);
    所以:
    typedef int (*fa[20])(int);

    其中A是int,B是(*fa[20])(int),这里B中是没有空格的!
    typedef A B;//B就是A的别名,所以(*fa[20])(int)也就是可以代替int。
    这类似 的定义在头文件中非常多,可以打开window.h来看看。

      回复  引用    

  • #2楼   zelor [未注册用户] Posted @ 2006-02-27 20:57
    你的想法基本上是没错的。以前有大拿说过这类话。   回复  引用    

  • #3楼   航天奇侠       Posted @ 2006-05-27 22:34
    typedef int (*fa[20])(int);

    这种说法也可以?怀疑ing....

    我认为typedef的定义是这样的:

    typedef a b;定义某一类型的别名。其中a必须是类型。b必须是表识符。

    但是 typedef a b;并非是唯一的形式,也就是a左,b右这种形式。正确的理解应该是和变量的定义的形式是相同的。
    如 int a; --〉 typedef int a;
    其中,用类型别名的表识符替代变量的表识符。

    因此,typedef int (*fa[20])(int) 可以预知的事,fa 是b,因为只有这个才是正确的表识符。而a 是 int(*[20])(int)之类的。

    为何不能准确地说出类型呢?因为这要结合运算符的顺序才能很好的解释正确的类型是什么。碰巧,我只有查书才能知道准确的定义。

      回复  引用  查看    

  • #4楼   沐枫       Posted @ 2006-06-30 13:36
    正是由于typedef的定义过于古怪。
    所以,在c++0x建议,对于模板的typedef,已经放弃typedef,改用using。
    如:
    template<class T> using f = vector<T, ...>;

    说起来,C/C++的语法,其最变态之处就在于变量和类型的定义上。因此,最好去除typedef,全部采用using。如:
    using fa = int(*[20])(int);

    再者,变量定义上面,也应该改成类型后置的方式,如:
    a,b: int;
    pa,pb: int*;
    fa: int(*[20])(int);

    多清爽,不要为了 char* pa, a;到底哪个是指针,骗了一堆人。
      回复  引用  查看    

  • #5楼   azmo [未注册用户] Posted @ 2006-09-04 12:40
    学习了~~   回复  引用    

  • #6楼   littlefoolbear [未注册用户] Posted @ 2007-02-08 23:57
    @seeker
    typedef int (*fa[20])(int);

    其中A是int,B是(*fa[20])(int),这里B中是没有空格的!
    typedef A B;//B就是A的别名,所以(*fa[20])(int)也就是可以代替int。
    -----------
    真的可以吗??我在gcc上可是编译出错哦。   回复  引用    

  • #7楼   littlefoolbear [未注册用户] Posted @ 2007-02-09 00:20
    补充说明一下,我说的编译出错,是指用(*fa[20])(int)也就是代替int来定义变量的类型。

    个人感觉kensta的总结非常有道理,虽然没有官方文档的证明......   回复  引用    

  • #8楼   huang [未注册用户] Posted @ 2007-03-18 23:30
    typedef struct _A A该怎么解释?struct后有一个空格   回复  引用    

  • #9楼 [楼主]  kaikai       Posted @ 2007-03-19 09:43
    @huang
    AnB: 'struct _A A'
    A: 'struct _A '
    n: 'A'
    B: ''
    typedef AnB: 'typedef struct _A A'
    于是A就是struct _A的别称。   回复  引用  查看    

  • #10楼   euclid       Posted @ 2007-04-01 09:41
    希望c++0x的那个建议赶快变成现实~   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接:
 


 
Copyright © kaikai Powered by: 博客园 模板提供:沪江博客