Я знаю, что в заголовочных файлах есть форвардные объявления различных функций, структур и т.д., которые используются в файле .c, который "вызывает" #include, правильно? Насколько я понимаю, "разделение сил" происходит следующим образом:
Заголовочный файл: func.h
-
содержит следующее объявление функции
int func(int i);
Исходный файл C: func.c
-
содержит фактическое определение функции
#include "func.h" int func(int i) { return ++i ; }
исходный файл C source.c ( "актуальная" программа):
#include <stdio.h>
#include "func.h"
int main(void) {
int res = func(3);
printf("%i", res);
}
Мой вопрос: видеть, что #include - это просто директива компилятора, которая копирует содержимое .h в файл, в котором находится #include, как файл .c знает, как реально выполнить функционировать? Все, что он получает, это int func(int i);, так как же он может выполнять функцию? Как он получает доступ к фактическому определению func? В заголовке есть какой-то "указатель", в котором говорится "что мое определение, там!"?
Как это работает?