《C语言接口与实现》读书疑问1(2012.06.03已解决)

2012.06.03 已解决:

见中文版《C专家编程》P267页下面部分一句话:

“在C++中,由typedef定义的名字不能与已有的结构标签冲突,但在C语言中却是允许的(它们属于不同的名字空间)”


原文:

很疑惑,比如书中头文件stack.h的代码:

/* $Id: H:/drh/idioms/book/RCS/inter.doc,v 1.11 1997/02/21 19:42:15 drh Exp $ */
#ifndef STACK_INCLUDED
#define STACK_INCLUDED
#define T Stack_T
typedef struct T *T;
extern T     Stack_new  (void);
extern int   Stack_empty(T stk);
extern void  Stack_push (T stk, void *x);
extern void *Stack_pop  (T stk);
extern void  Stack_free (T *stk);
#undef T
#endif

上面的那个【T】到底是个“结构”呢,还是“指针”呢?

全书中都是充满了这样的定义,不过请记住,这些都是在扩展名“C”下可以的!!如果cpp扩展名的文件,马上报错:

error C2040: 'Stack_T' : 'struct Stack_T *' differs in levels of indirection from 'struct Stack_T'

在C++语言里,typedef struct T *T;的问题,还是搞不太明白,如果这个问题不能解决的话,那么《C语言接口与实现》的这些源码不是没办法应用到【C++】上来吗?难道每个将来每个复用该接口的程序都是用【.c】来实现吗?

下面是一个有用的链接,但是看不太懂:

http://stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c/612476#612476

(同google搜索关键字得到:typedef struct T *T)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值