Это звучит как взаимоисключающие требования;Вы хотите, чтобы одна реализация функции была разделена между двумя единицами перевода, но вы хотите объявить ее static
, чтобы она не была видна другим единицам перевода.К сожалению, C не предлагает такой детализации;символ либо виден всем другим единицам перевода, либо нет.
Вы можете подделать ее, поместив функцию определение в заголовочный файл (объявленный как статический), а затем #include
в исходные файлы, которые в ней нуждаются:
#ifndef FUNC_H
#define FUNC_H
static void func() {...}
#endif
Дело в том, что каждая единица перевода, которая включает этот файл, будет иметь избыточную реализацию функции.Это может иметь или не иметь большого значения для вас.
Лично я просто объявил бы функцию обычно в ее собственном модуле перевода, создал для нее заголовок, включил только заголовок в файлы, которые должны вызвать эту функцию, и задокументировал бы эту функцию только вызываться из этих файлов.