使用extern:获取'找不到文件'

时间:2011-03-07 23:35:18

标签: c

// fpoin1.c

#include<stdio.h>
#include<conio.h>
#include<fpoin.c>
void swap(int,int);
void main()
{
int i=0;
i++;
if(i<=5)
{
printf("%d",i);
swap(59,23);
getch();
}

// fpoin.c

#include<stdio.h>
#include<conio.h>
extern int i;
void swap(int ,int );
int main()
{
int i=3;
int p,q; 
swap(p,q);
printf("\np=%dq=%d",p,q);
getch(); 
return 0;    
}
void swap(int p,int q)
{
int t=p;
p=q;
q=t;
}

当我编译fpoin1时,它说“找不到fpoin.c”,但两者都在同一目录中。 缺少什么?

3 个答案:

答案 0 :(得分:4)

这应该解决它:

#include "fpoin.c"

使用""<>会影响编译器搜索文件/标头的方式。您应该使用<>表示“system”和“library”包含,并在包含您自己的文件时使用""

但是,您不应该包含.c文件。您应该编译其中的每一个,然后使用例如将它们链接在一起。这个gcc one-liner:gcc -Wall -o appname fpoin.c fpoin1.c

您还需要确定要使用的两个main()函数中的哪一个。您必须只有一个main()

此外,您的swap函数将无法按预期工作,因为您按值传递其参数。试试这个:

void swap(int * p, int * q) {
  int t=*p;
  *p=*q;
  *q=t;
}

...

swap(&p, &q)

当然,你不能再调用swap(59,23) - 没有变量可以修改。 swap(59,23)应该做什么?

答案 1 :(得分:2)

通常只包含 .h 文件和链接其他 .c 文件,但如果要包含本地文件,应该使用"..."而不是<...>分隔符来完成,所以:

#include "fpoin.c"

<...>表示系统标题。

在您的情况下,只需切换到链接就不够好,因为main()将以任意方式进行多重定义。您可能想稍微重新考虑模块化。

答案 2 :(得分:2)

<中使用>#include对编译器说您包含“标准标题”。标准标题不一定是磁盘上的真实文件:编译器使用魔术来包含标准标题

要包含真实文件,请在#include

中使用引号
#include "fpoin.c"

还有一件事:不习惯包含代码。仅使用声明编写文件并包含它们(具有.h扩展名的文件)。