请教typedef struct A A;用法的含义

2019-12-11 18:31发布

最近在学习sqlite3,其中有一个sqlite3_stmt结构,找不到定义的地方。
只能找到 typedef struct sqlite3_stmt sqlite3_stmt; 这样的语句。
自己定义自己,实在看不懂它的作用,请教论坛大神指教。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
28条回答
security
2019-12-13 22:02
zhugean 发表于 2018-5-22 08:42
我的问题是找不到真正定义的地方,这样定义起什么作用.

在 8 楼,takashiki 已经给出了答案。
这是写法叫做:不完整类型(incomplete type)。

你可以去搜索一下调用 struct sqlite3_stmt 或者 sqlite3_stmt 的地方,肯定都是以指针形式出现的。
也就说调用形式都是 struct sqlite3_stmt * 或者 sqlite3_stmt *。

编译器不需要知道 struct sqlite3_stmt 的定义,就可以用来定义一个指针,因为指针的 size 是确定的,对于 32bit 的平台,指针总是 32bit 的。

至于为什么要出现这么一个结构体定义,本质原因是为了封装、隐藏细节。
真正的结构体,会在内部定义,对外呈现的 API 接口,统一是 struct sqlite3_stmt * 或者 sqlite3_stmt * 的抽象类型。
换个角度来看,你可以视为是 void * 类型。这样应该好理解一点,只不过用 struct sqlite3_stmt * 或者 sqlite3_stmt * 的话,编译器会帮我们做静态类型匹配检查,代码的可阅读性也好一点。

一周热门 更多>