Ведение журнала с помощью макроса variadic

Я пытаюсь написать макрос регистрации без накладных расходов в C.

Моя первая идея:

#define debug_print(...) \
  { \
    printf(_LOG_FMT, _LOG_ARGS); \
    printf(__VA_ARGS__); \
    printf("\n"); \
  }

Но это проблема, которую я должен вызвать printf три раза (накладные расходы).

Моя вторая идея:

#define _LOGFUNCTION(LEVEL, message, ...) \
    printf(_LOG_FMT message "\n", _LOG_ARGS, __VA_ARGS__)

Но теперь я не могу передать простую строку для входа. Он будет жаловаться на ноль аргументов в VA_ARGS.

Есть ли способ исправить обе эти проблемы?

Большое спасибо за вашу помощь!

1 ответ

Нашел ответ от комментария выше!

#define BAR_HELPER(fmt, ...) printf(fmt "\n%s", __VA_ARGS__)
#define BAR(...) BAR_HELPER(__VA_ARGS__, "")

/questions/43180049/standartnaya-alternativa-tryuku-gccvaargs/43180058#43180058

Еще раз спасибо Некоторые программист чувак!

Другие вопросы по тегам