C компилятор не может найти определение функции - PullRequest
0 голосов
/ 03 августа 2020

Я новичок в программировании 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 фактически компилирует исходный код файлы.

1 Ответ

1 голос
/ 03 августа 2020

Добавьте имя файла в команду компиляции:

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