0

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

typedef struct A_def A;
typedef struct A *A_ptr;

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

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

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

4

1 回答 1

0

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

“转到定义”是visual studio intellisense的一部分,它可能在它解析的源文件中找不到结构的定义。

如果存在循环依赖关系或为了将接口与实现分离,通常会前向声明结构。

于 2013-09-12T10:29:27.027 回答