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