2013-03-28 3 views
24

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

static int function1(); 

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

static int function1() 
{ 
< function definition> 
} 

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

warning: function1 declared static but never defined 

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

+0

Перемещение вперед объявление из заголовка в исходном файле? – simonc

+16

Если функция 'static', вы не должны помещать ее в заголовочный файл (кроме' inline') ... – 2013-03-28 12:11:02

+0

@ H2CO3 или закрытый заголовок – SomeWittyUsername

ответ

23

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

Уверены ли вы, что вы не включили файл abc.h в любые другие файлы .c?

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

+0

У меня была такая же проблема. Очевидно, что у меня должны быть только статические объявления внутри файла .c, а не в файле заголовка. Duh: D – AntonioCS

0

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

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

Дубликат: Static functions in C