我在链接 .h 和 .c 文件时遇到问题,我也阅读了一些关于这个问题的线程,所有这些都有点模糊,我仍然无法完全掌握它的概念,而且我有很多链接问题,假设我有 bc 和 bh,我将在 ac中使用,我很困惑是否同时包含 bh ac 和 bc 因为 bc 本身需要知道 bh 中定义的结构,我有一些函数,它的原型在 bh 中并被定义在 bc 中也使用 bh 中的结构,我不包括 bc 中的 bh cuz,因为我知道 bh 更像是 ac 的接口,它将使用 bc 中的函数。这里有一个更清晰的例子
.bh 文件
typedef struct{
int x, y;
}myStruct;
void funct1(myStruct);
void funct2(myStruct);
bc 文件
void funct1(myStruct x)
{
//do something
}
void funct2(myStruct y)
{
//do something
}
交流档案
#include "b.h"
int main()
{
myStruct x;
funct1(x);
funct2(y);
return 0;
}
在cygwin中执行命令:gcc bc ac -g
现在令人困惑的部分是,我有一个链接错误,其中在编译 bc 时它无法检测到 bh 中的结构和原型因为我所知道的是 bh 用于从 ac 链接 bc 但是当编译两个 .c 时似乎bc 找不到它的结构和原型,
为什么我没有在 bc 中包含 bh? 答案:因为据我所知,bh 已经包含在 ac 中,当我再次将它包含在 bc 中时,我将进行双重包含它不会工作,也许我仍然不知道如何使用它,如果你知道请随时讨论这个。
如果您对如何进行此操作有任何想法,请随时告诉我一些。
有一个#ifdef 指令,但我似乎不知道如何做到这一点。
注意:假设所有上述代码在语法上都是正确的,如果有任何拼写错误的单词请忽略,我只是在 .h 和 .c 之间的包含之后