我已经看到以下两种在C API中声明不透明类型的样式.使用一种风格而不是另一种风格有明显的优势吗?
// foo.h
typedef struct foo * fooRef;
void doStuff(fooRef f);
// foo.c
struct foo {
int x;
int y;
};
Run Code Online (Sandbox Code Playgroud)
// foo.h
typedef struct _foo foo;
void doStuff(foo *f);
// foo.c
struct _foo {
int x;
int y;
};
Run Code Online (Sandbox Code Playgroud) 我一直在阅读SO,并遇到了以下问题,这些问题涉及为什么typedefing指针类型不好.
不透明的C结构:它们应该如何声明? 和 Const-correctness和不可变的分配对象
我想知道是否有人可以扩展并解释为什么typedefing指针类型很糟糕,并且可能提供一些可能发生错误的示例.
另外,如果typedefing指针类型确实是禁忌,那么为什么Win32 API会这样做呢?在Win32 HANDLE(和有效的句柄类型)中,typedef为a void *.