【发布时间】:2021-11-13 08:15:05
【问题描述】:
这就是我的文件结构的样子
这是我文件中的文本
fun.h
void fun()
{
FILE *filePointer ;
char i[20],p[20];
filePointer = fopen("pass", "r") ;
fscanf(filePointer,"%s %s",i,p);
printf("%s %s",i,p);
}
./pas/pass
inside inside
main.c
#include <stdio.h>
#include "./pas/fun.h"
int main( )
{
fun();
}
通过
outside
outside
当我运行 main.c 时,输出是:
也就是说fun里面的代码是在fun.h被导入的file_handling目录里面寻找pass文件,这完全可以理解。 但这并不能解决我的问题。
想要的是,无论我在哪里包含 fun.h 文件,它都应该只在 pas 目录中搜索该文件。
我该怎么做?
【问题讨论】:
-
您的文件结构图像应该包括可执行文件的位置。
-
我知道但是,有什么办法可以解决这个问题,因为我正在使用 C 库,所以用户将包含我的 .h 文件,现在我不知道路径是什么用户的可运行文件。
-
不要在 .h 文件中定义函数。它们应该只包含声明。这些函数应该在 .c 文件中定义一次。然后客户端文件包括 .h 文件,并且您链接 与从.c 文件生成的目标文件。您现在所拥有的将无法在具有多个使用您的函数的源文件的任何应用程序中正常工作。
-
@TomKarzes 你能否澄清一下“与 .c 文件生成的目标文件的链接”是什么意思。
-
在
fun.h中输入void fun(void);(你有一个不完整的原型,带有未指定的参数——(void)解决了这个问题)。然后在fun.c中,放入fun的定义(还添加了缺少的(void))。将fun.c与cc -c fun.c编译成fun.o。同样,编译main.c和cc -c main.c生成main.o然后生成链接的可执行文件,执行cc -o main main.o fun.o这就是多文件C 程序的构建方式。
标签: c include file-handling