Поговорив о связывании в ## C на irc.freenode.net, я пошел протестировать некоторые изученные мной концепции и придумал эту ситуацию.
У меня есть этот файл с именем main.c:
int main(void) {
func();
return 0;
}
И этот файл с именем test.c:
#include <stdio.h>
void func(void) {
printf("Hello.\n");
}
Там нет файла test.h.
Я делаю это:
$ gcc -c main.c
$ gcc -c test.c
$ gcc main.o test.o
$ ./a.out
Hello.
$
и это работает.Разве gcc не должен жаловаться при первом вызове, что он не знает функцию func (), которая вызывается в файле main.c?Я не включил ни одного файла с его прототипом или реализацией, и все же gcc может скомпилировать объектный код и сделать вменяемый исполняемый файл.Что случилось там, что мне не хватает?
Спасибо.