|  |      1ysc3839      2020-10-29 11:29:22 +08:00 via Android > 不想暴露任何数据结构,只提供 api 。 正常写就好了,为什么会暴露?没明白你遇到了什么问题。 | 
|  |      2lcdtyph      2020-10-29 11:37:00 +08:00 via iPhone  1 typedef struct mystruct *mystruct_t; mystruct_t mystruct_new(...); void mystruct_destroy(mystruct_t); .... 这样头文件里不会暴露这个结构体的细节 | 
|      3RoyceLee      2020-10-29 11:41:13 +08:00 不透明指针 | 
|      4GM      2020-10-29 11:43:11 +08:00 入参、出参、返回值只用自带类型( int 、float 、char 等以及对应的数组、指针),不要用任何自定义类型就好了。 | 
|      5optional      2020-10-29 11:48:22 +08:00 via Android c 又没有保留编译信息,你头文件不给数据结构,谁还能知道你的数据结构不成? | 
|  |      6sillydaddy      2020-10-29 11:50:11 +08:00 用 handle 啊,相当于令牌(token)。如果 api 之间有关联(比如第 2 个 api 用到第 1 个 api 的运算结果),就可以使用 handle 来传递信息,handle 就是内部数据的指代名称,外界看不到。 | 
|  |      7xiangyuecn      2020-10-29 12:03:07 +08:00 删掉文档,删掉提交记录?🐶 | 
|      8nightwitch      2020-10-29 12:08:28 +08:00  1 头文件只写结构体的前向声明和函数声明,实现放到.c 里面。 | 
|      9TreStone      2020-10-29 12:08:49 +08:00 via iPhone handle +1 | 
|  |      10icyalala      2020-10-29 12:15:35 +08:00 2 楼正解。。用 handle 那套逻辑会更麻烦 | 
|  |      1123571113      2020-10-29 12:33:17 +08:00 迭代器? | 
|      12hitmanx      2020-10-29 12:37:50 +08:00  1 gcc 的话可以用__attribute__ visibility 显式控制哪些 symbol 你要 export,配合-fvisibility=hidden 去掉那些不该暴露的 symbol 定义 opaque type 的话,typedef struct MyApiType MyApiType 就行了。 | 
|  |      13tamlok      2020-10-29 13:04:46 +08:00 via Android 学一下 qt 的源码? | 
|  |      14ipwx      2020-10-29 14:30:46 +08:00 我寻思就连 C++ 也能隐藏实现细节。。。 ---- // SomeThing.hpp: class SomeThingPrivate; class SomeThing { private: SomeThingPrivate *__actual_thing; public: SomeThing(); void some_function(); }; // SomeThing.cpp class SomeThingPrivate { public: void some_function(); }; SomeThing::SomeThing() : __actual_thing(new SomeThingPrivate()) { }; SomeThing::some_function() { this->__actual_thing->some_function(); } | 
|  |      15yyid      2020-10-29 14:45:14 +08:00 输入输出都是地址,里面是什么自己控制 | 
|  |      16ychost      2020-10-29 15:49:42 +08:00 为啥要隐藏数据结构?这个很重要? | 
|  |      17HannibaI      2020-10-29 15:53:57 +08:00  1 |