c - 不透明类型的精确定义以及它们的定义到底对用户隐藏在哪里以及如何查看它们?

标签 c types hidden encapsulation interface-implementation

我正在使用 Visual Studio。 我遇到过如下代码:

typedef struct A_def A;
typedef struct A *A_ptr;

A_def 已隐藏。它是一种不透明类型。它的实现是隐藏的,所以当我查看它的定义时,VS 中什么也没有发生。

这是因为实现/定义隐藏在 .dll 或 .lib 文件中吗?如果是这样,我如何使用 dumpbin 或类似工具确认 A_def 定义的存在?

此外,如果这确实是一个不透明类型,为什么它会被称为 future 声明的结构或前向声明(此类不透明类型的定义正在被抛弃),因为它已经已声明并且仅对用户隐藏?

最佳答案

这只是一个前向声明。该定义在编译时需要(除非您仅使用指向结构的指针)并且不会隐藏在 dll 或 lib 中。

“Go to defnition”是Visual Studio智能感知的一部分,它可能没有在它解析的源文件中找到结构体的定义。

如果存在循环依赖或为了将接口(interface)与实现分开,结构通常会被前向声明。

关于c - 不透明类型的精确定义以及它们的定义到底对用户隐藏在哪里以及如何查看它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18761561/

相关文章:

css - 在绝对定位的 div 上隐藏滚动条

javascript - 该网站中的这些javascript函数在哪里定义?

c++ - if (flag==0) 或 if (0==flag) 哪个会执行得更快?

C - 在代码中定义应用程序版本

scala - 无法弄清楚 = :=[A, B] 代表什么

WordPress > 从自定义帖子类型获取自定义分类法

c - 哪些 C99 功能被认为是有害的或不受支持的

c - C 编程中字符串的 scanf (“%s",a) scanf ("%[^\n]s",a) 和 gets(a) 有什么区别?

Typescript:定义对象

c++ - 在没有控制台的情况下运行 Win32 程序 "silient"