Как я могу извлечь только имя определенной функции из функции, такой как макрос в C? - PullRequest
0 голосов
/ 26 февраля 2020

Допустим, я хочу иметь 2 модуля, которые слабо связаны. Первый модуль зависит от интерфейса другого модуля. Я хотел бы отделить их, введя определения для интерфейсов.

В module1_cfg.h

#define FUNC1_MODULE2(x) Func1_module2_impl(x)

В module1. c Я бы использовал это определение для доступа к другому модулю.

if(TRUE != FUNC1_MODULE2(arg))
{
    //do something
}

В модуле 2. c тогда я бы реализовал эту функцию:

BOOL Func1_module2_impl(uint8_t i)
{
   //do something
}

Эта стратегия развязки работает очень хорошо, пока я не хочу писать модульные тесты для модуля 1. Если я хочу написать свои модульные тесты с Hippomocks, они бы выглядели так:

void test_func1_module2_ok()
{ 
    MockRepository mocks;
    mocks.ExpectCallFunc(Func2_module2_impl).Return(TRUE);
    ...
}

Но теперь мои модульные тесты для module1 зависят от module2. Будет ли возможность использовать введенную функцию наподобие макроса (FUNC1_MODULE2) в модульном тесте, но с некоторыми макросами magi c пропустить скобку, чтобы я мог передать указатель на определенную функцию гиппопамамам? Я хотел бы придерживаться функции, подобной макросам, и избегать объектных макросов в реальном коде для переопределения функций, но использовал бы любые приемы, необходимые в модульном тесте, чтобы избавиться от скобок.

Спасибо за вашу помощь!

...