Ведение журнала с помощью макроса variadic - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь написать макрос записи без накладных расходов в 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 Ответ

0 голосов
/ 02 ноября 2018

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

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

https://stackoverflow.com/a/8673872/5531233

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

...