Чтобы реализовать модульное тестирование для одной из моих программ, я добавил правило make-файла для сборки программы в виде статической библиотеки при запуске «make check».Я обертываю main () с # ifndef TEST_LIB и # endif ( TEST_LIB определяется при сборке в виде библиотеки).
Затем ясоздал несколько небольших C-файлов для тестирования некоторых функций из этой библиотеки.
Некоторые функции из библиотеки объявлены статически.
Что вы можете догадаться, выдает такие предупреждения, когда я пытаюсь скомпилироватьтесты:
/ .. / test / config_test.c: 15: 3: предупреждение: неявное объявление функции 'реализовать_дом' [-Ядное-объявление-функции]
Поскольку реализовать_дом объявлено статически в исходном коде (файл .c) для программы.
Я попытался решить одну проблему: #include config_rmw.c (который содержит статические функции) в файл модуля .c (config_test).Это на самом деле работает и не дает мне никаких предупреждений при компиляции, хотя config_rmw.c уже встроен в библиотеку.
Другое решение, о котором я подумал, было что-то вроде
#ifndef TEST_LIB
static
#endif
void function()
{
definition
}
И добавление прототипа к заголовку, что является выражением #ifdef.
#ifdef TEST_LIB
function prototype
#endif
Но делать это не совсем правильно, особенно когда это нужно сделать для большего количества функций, когда я продолжаю реализовывать большемодульные тесты.
Недавно я прочитал в книге, что статические функции должны идти в заголовочный файл.Я попробовал это, но это только частично решило мою проблему.Я завелся предупреждениями компилятора вроде:
В файле, включенном из ../../src/rmw.c:38:0: ../../src/config_rmw.h:86: 1: предупреждение: «реализовать_дом» определено, но не используется [-Wunused-функция] реализовать_доме (char ** str) ^ ~~~~~~~~~~~
Я немного прочели я вроде понимаю, почему это происходит.И в основном это означает, что я получу отдельную копию этой функции в каждом файле .c, который включает в себя заголовочный файл, в котором она определена.Который мне не нужен.Причина, по которой я объявляю некоторые функции статически, заключается в том, что они нужны только в одном файле.
Затем я читаю некоторые комментарии, в которых люди говорят, что статические функции никогда не должны определяться в заголовочных файлах!
Итак... Я застрял с вопросом о лучшем подходе и других вариантах.Я предпочитаю держать свои программы организованными и применять хорошие навыки кодирования.
Я написал несколько тестов, используя только основанный на сценариях подход, который не требует, чтобы моя программа была построена как библиотека, но я думаю, что будетПреимущества использования обоих методов в зависимости от тестируемых функций.
ОБНОВЛЕНИЕ (Дополнение) Программа имеет 20 исходных файлов (включая заголовки) и ~ 4K строк кода.