У меня есть программа, состоящая из разных модулей. Модули взаимосвязаны через вызовы функций. Например. State Init вызывает функцию init каждого модуля. Должно быть возможно отключить модули (исключить из компиляции). Самый простой способ - использовать препроцессоры. Но это порождает огромное количество коды:Пропуск вызова функции, если не задан
#IF MODULE_XXX_COMPILE
ret = module_func(...);
#ELSE
ret = 0;
#ENDIF
Я хотел бы получить макрос так:
ret = MOD_COMPILE_CALL(module_func(...));
Так что макрос проверяет, если определить является 1, если да, то выполняет функцию иначе он SKIPS выполнение и возвращает 0. Проблема в том, что мой компилятор говорит мне, что невозможно использовать #IF
в макросе. Есть ли способ обойти это?
Не видя ваш код макроса мы не в состоянии помочь вам – ckruczek
ли это наоборот. Условно: #define MOD_COMPILE_CALL (x) 'для расширения до' x' или '0' в зависимости от' MODULE_XXX_COMPILE'. – kaylum
Не проще ли построить систему сборки между полной или заглушкой версии модуля? Таким образом, все вызовы остаются такими, как если бы все модули были включены, но функции модуля ничего не делают, когда выбран заглушка. Не беспокойтесь о стоимости пренебрежимой производительности, пока вы не сможете ее измерить. –