我不明白如何应用我老师告诉我的内容。
我的老师告诉我的是,如果你想在.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
但是,每当我按照上面的输入操作时,我总会得到错误,而我却无法弄清楚为什么要挽救我的生命。
答案 0 :(得分:0)
您还没有提供任何代码,因此我无法根据您的具体情况说话。
将某些内容放在.h或.c文件中,不会影响其公共性或私密性。但是,将它放在.h文件中,将#include
d放入2个不同的.c文件中(我假设你这样做)意味着这些文件将使用相同的定义。
答案 1 :(得分:0)
.h文件中的声明可以由多个.c文件引用。当你声明其他.c文件中的代码将使用的函数,结构和常量来调用你正在编写的函数时,这就是你想要的;如果这两组代码不同意这些定义,它们之间的调用将无法按预期工作。
当然,您必须确保.h文件是自包含的,并且包含编译其中所有内容所需的所有内容 - 除了可能的其他.h文件,尽管更常见的是.h为自己需要的东西发行自己的包含。 (这提高了同一个.h不止一次包含的可能性,这就是为什么大多数都是用“包含警卫”写的,以确保它们的内容只出现一次,无论它们被包括多少次。)