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

来源:互联网 发布:福彩三地九宫图算法 编辑:程序博客网 时间:2024/05/21 21:37

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_Ttypedef 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)


原创粉丝点击