【发布时间】:2014-09-30 23:31:29
【问题描述】:
我不明白如何应用老师告诉我的内容。
我的老师告诉我的是,如果你想在 .h 文件中声明一个结构,那么你就是将结构公开,但是如果你在 .c 实现文件中声明结构,那么你就是将它设为私有。但是,如果我在我的 .c 文件中声明它,然后尝试将两者放在一个 main.c 文件中,我总是会出错,如果我将该声明移回 .h 文件,那么一切都会正常进行。我得到的错误始终是在 .c 文件中声明的前向声明错误
那么,我可以将结构声明(通过指针)放在我的 .c 文件中吗?我该怎么做呢?
TLDR ;我不明白如何在我的 .c 实现文件中使用与我的 .h 文件结合的指针来声明结构。
编辑:
这里是 .h 文件
typedef char *ListItemP;
typedef struct List *ListP;
//some functions
这里是 .c 文件
struct List
{
int foo;
ListItemP P;
};
//implementations of .h functions
但是,每当我按照上面的输入进行操作时,我总是会出错,我就是不知道为什么要挽救我的生命。
【问题讨论】:
-
像其他任何东西一样声明它
-
我们不是读心术的人。我们需要看一些代码。
-
你能用一个小例子来更新你的问题吗?有多种声明类型的方法,但使用哪一种取决于您想要做什么。
-
如果主程序需要了解结构的内部,则需要在头文件中定义结构,以便主代码和实现代码都可以使用它。如果主程序只需要一个指向结构类型的指针并且不需要了解内部,那么你可以将它隐藏在实现代码中。 (有几个密切相关的问题,一些来自本周,一些来自大约一年前,还有一些来自几年前——随着人们开始学习 C,这个话题每年都会出现。)
-
我认为你的老师在谈论 P-IMPL 成语,又名不透明指针,又名柴郡猫。您可以在上面重复的问题中找到答案,或者直接在 Google 上找到答案。
标签: c pointers struct forward-declaration