Функция объявлена ​​статической, но не определена

У меня есть файл заголовка, предположим abc.h, где у меня есть объявление функции как:

static int function1();

Я включил этот файл заголовка в abc.c и определил функцию и использовал ее.

static int function1()
{
 < function definition>
}

После компиляции я получаю предупреждение:

warning: function1 declared static but never defined

Как удалить предупреждение, не удаляя статические. Спасибо.

Ответ 1

Статичная функция может быть объявлена ​​в заголовочном файле, но это приведет к тому, что каждый исходный файл включит заголовочный файл в свою собственную личную копию функции, что, вероятно, не является тем, что было предназначено.

Неужели вы не включили файл abc.h в любые другие .c файлы?

Поскольку объявление функции как статического, требуется, чтобы функция была определена в all.c файле (файлах), в который она включена.

Ответ 2

Хорошая практика: объявляйте статические функции в исходном файле, в котором они определены (пожалуйста, также укажите прототип), так как это единственный файл, в котором они отображаются.

Таким образом, функция видна только этому файлу, такие проблемы видимости могут уменьшить возможный конфликт кода! Итак, просто укажите прототип и определение статической функции в .c файле. Не включайте статическую функцию в файл заголовка; файл .h предназначен для внешнего потребления.

Дубликат: Статические функции в C