试图理解在.h文件或其.c实现文件中声明结构之间的差异

时间:2014-09-30 23:31:29

标签: c pointers struct forward-declaration

我不明白如何应用我老师告诉我的内容。

我的老师告诉我的是,如果你想在.h文件中声明一个结构公开的结构,但是如果你在.c实现文件中声明了结构,那么你就是把它变成私有的。但是,如果我在我的.c文件中声明它,然后尝试将两者放在一个main.c文件中,我总是会出错,如果我将该声明移回.h文件,那么一切都会解决。我得到的错误始终是在.c文件中声明的前向声明错误

那么,我可以将结构声明(通过指针)放在我的.c文件中,我该怎么做呢?

TLDR;我不理解如何使用指针与我的.h文件一起在我的.c实现文件中声明结构。

编辑:

这是.h文件

typedef char *ListItemP;
typedef struct List *ListP;

//some functions

这里是.c文件

struct List
{
    int foo;
    ListItemP P;
};

//implementations of .h functions

但是,每当我按照上面的输入操作时,我总会得到错误,而我却无法弄清楚为什么要挽救我的生命。

2 个答案:

答案 0 :(得分:0)

您还没有提供任何代码,因此我无法根据您的具体情况说话。

将某些内容放在.h或.c文件中,不会影响其公共性或私密性。但是,将它放在.h文件中,将#include d放入2个不同的.c文件中(我假设你这样做)意味着这些文件将使用相同的定义。

答案 1 :(得分:0)

.h文件中的声明可以由多个.c文件引用。当你声明其他.c文件中的代码将使用的函数,结构和常量来调用你正在编写的函数时,这就是你想要的;如果这两组代码不同意这些定义,它们之间的调用将无法按预期工作。

当然,您必须确保.h文件是自包含的,并且包含编译其中所有内容所需的所有内容 - 除了可能的其他.h文件,尽管更常见的是.h为自己需要的东西发行自己的包含。 (这提高了同一个.h不止一次包含的可能性,这就是为什么大多数都是用“包含警卫”写的,以确保它们的内容只出现一次,无论它们被包括多少次。)