Я знаю, что в заголовочных файлах есть форвардные объявления различных функций, структур и т.д., которые используются в файле .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
? В заголовке есть какой-то "указатель", в котором говорится "что мое определение, там!"?
Как это работает?