Все предложенные выше ответы (кроме нескольких) предполагают условную компиляцию, которая требует модификации исходного кода. Таким образом, это не должно быть проблемой, это просто добавит беспорядок (только для тестирования). Скорее вы можете сделать что-то вроде этого.
Скажите, что ваша функция для тестирования
static int foo(int);
Вы создаете еще один заголовочный файл с именем testing_headers.h, который будет иметь содержимое -
static int foo(int);
int foo_wrapper(int a) {
return foo(a);
}
Теперь при компиляции вашего файла c для тестирования вы можете принудительно включить этот заголовок из параметров компилятора.
Для clang и gcc флаг равен --include
. Для компилятора Microsoft C это /FI
.
Это потребует абсолютно 0 изменений в вашем файле c, и вы сможете написать нестатическую оболочку для вашей функции.
Если вам не нужна нестатическая оболочка, вы также можете создать нестатический указатель глобальной функции, инициализированный foo.
Затем можно вызвать функцию, используя этот глобальный указатель на функцию.