// 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”,但两者都在同一目录中。 缺少什么?
答案 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
扩展名的文件)。