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


你可能感兴趣的:(c,struct,Google,读书,扩展,语言)