Недопонимание со статической функцией (с внутренним связыванием)
В файле file.h определена следующая функция:
static void fun(void)
{
printf("Hello world\n");
}
Файл file.c содержит следующий код, который корректно выполняется:
#include "file.h"
int main()
{
func();
return 0;
}
Собственно вопрос - почему функция fun() видна за пределами заголовочного файла, если она должна быть видна только внутри файла file.h ?
Ответы (1 шт):
Экземпляры статических функций видны только в одной единице компиляции (.h + .c => .o в Линукс).
Хедер файл - не компилируется а добавляется к тексту компиляции исходника .c.
А так как вы эту функцию записали в хедер файл, то будет реализовано то количество экземпляров функций, что и количество компиляций использующих включение данного хедера. И в каждой единице компиляции статическая функция не видит другого экземпляра.
.h + a.c = fun первый статический
.h + b.c = fun второй статический
c.c = нет видимости ни к первому ни к второму
Ответ : функция fun статическая к единице компиляции, а не к хедер файлу.