C编译器可以';找不到函数定义

C编译器可以';找不到函数定义,c,compilation,linker,coderunner,C,Compilation,Linker,Coderunner,我是C编程新手,遇到以下问题: 三个文件:main.c、foo.h、foo.c位于同一目录中 main.c: #include <stdio.h> #include "foo.h" int main(){ printf("%d",func(1)); } foo.c定义函数func: int func(int); #include "foo.h" int func(int a){ return a+

我是C编程新手,遇到以下问题:

三个文件:
main.c
foo.h
foo.c
位于同一目录中

main.c

#include <stdio.h>
#include "foo.h"    
int main(){
    printf("%d",func(1));
}
foo.c
定义函数
func

int func(int);
#include "foo.h"
int func(int a){
    return a+1;
}
此代码按预期工作,但当我将定义文件
foo.c
重命名为其他文件时,例如
bar.c
,然后
main.c
在编译过程中抛出一个错误:

LLVM错误:程序使用了无法解析的外部函数
\u func

我知道定义文件不需要与头文件具有相同的名称。为什么链接器在我将
foo.c
重命名为
bar.c
后找不到合适的定义

更一般地说,链接器如何搜索函数定义?逐个搜索同一目录中的每个
.c
文件?仅在
.c
文件中搜索定义,该文件与头文件具有相同的文件名

编辑:
我在MacBook上使用code runner IDE,不知道IDE实际上是如何编译源文件的。

在编译命令中添加文件名:

$ gcc -o main main.c foo.c && ./main
                     ^^^^^

你是如何编译的?您必须将对象文件传递给链接器
-o…
@o_是的,请编辑您的问题,包括编译行。您是否尝试过在编译行中包含这两个C文件?类似于
gcc main.c bar.c
?链接器在您让他链接的文件中搜索函数定义。因此,编译/链接的方式可能是错误的。您需要向我们展示如何编译/链接。如果你有一个IDE,你需要告诉我们你使用哪一个。同时告诉我们你在哪个平台上。你在使用这个:?@Jabberwocky Yes我认为他在使用一些奇特的IDE,所以我不确定他是否知道你在说什么。@Jabberwocky在这种情况下手动编译是个好主意。