Я новичок в программировании C и сталкиваюсь с этим вопросом:
Три файла: main.c
, foo.h
, foo.c
находятся в одном каталоге.
main.c
:
#include <stdio.h>
#include "foo.h"
int main(){
printf("%d",func(1));
}
foo.h
объявляет функцию func
:
int func(int);
foo.c
определяет функцию func
:
#include "foo.h"
int func(int a){
return a+1;
}
Этот код работает, как ожидалось, но когда я переименовываю файл определения foo.c
во что-то другое, скажем bar.c
, тогда main.c
выдает ошибку во время компиляции, говоря:
ОШИБКА LLVM: программа использовала внешнюю функцию _func
, который не может быть разрешен!
Я знаю, что файл определения не обязательно должен иметь то же имя, что и файл заголовка. Почему компоновщик не может найти подходящее определение после того, как я переименовал foo.c
в bar.c
?
В целом, как компоновщик ищет определение функции? Искать все .c
файлов в одном каталоге один за другим? Искать только определение в файле .c
, имя которого совпадает с именем файла заголовка?
РЕДАКТИРОВАТЬ: Я использовал IDE для запуска кода на MacBook, не знаю, как IDE фактически компилирует исходный код файлы.