После долгих поисков решения в Интернете я решил спросить здесь, подходит ли мое решение.
Я пытаюсь написать простую и модульную библиотеку журналов C, предназначенную для простого отключения и специально помогающую аспирантам и исследователям в отладке алгоритма, максимально снижающего влияние системы журналирования.
Моя проблема в том, что я хочу, чтобы пользователь библиотеки мог отключить систему журналирования во время компиляции, создавая исполняемый файл, в котором стоимость регистратора равна 0.
Код C будет выглядеть так:
...
logger_t * logger;
result = logger_init(logger);
if(result == -1) {...}
...
это просто инициализирует регистратор. В поисках примера кода я проверил заголовок assert.h, но это решение приводит к появлению списка предупреждений в моем случае. Фактически, если logger_init () заменить на 0 с использованием макроса, это приведет к тому, что регистратор переменных никогда не будет использоваться.
По этой причине я решил использовать этот подход:
int logger_init(logger_t *logger);
#ifndef NLOG /* NLOG not defined -> enable logging */
int logger_init(logger_t *logger) {
...
}
#else /* NLOG defined --> the logging system must be disabled */
#define logger_init(logger) (int)((logger = NULL) == NULL)
#endif /* NLOG */
это не приводит к предупреждениям, и я также избегаю накладных расходов при вызове функции. На самом деле моей первой попыткой было сделать так:
int logger_init(logger_t *logger) {
#ifndef NLOG /* NLOG not defined -> enable logging */
...
#endif
return 0;
}
продолжайте вызывать функцию, даже если она мне не нужна.
Как вы думаете, мое решение можно считать хорошим решением? Есть ли лучшее решение?
Большое спасибо, ребята!
Ура,
Armando