Как в Си сделать макрос с неограниченным количеством аргументов, который можно «отключать»?

Хочу чтобы все дебаг-сообщения включались если сделано один-единственный дефайн. У меня есть такое:
DEBUG("program started\n");
и есть такое:
#define DEBUG(str)                   \
#ifdef __DEBUG__                          \
  printf("DEBUG: " str);             \
#endif
и програма должна выводить "DEBUG: program started" только если до параметров компилятора добавить -D__DEBUG__. Но во-первых это не работает, а во-вторых тут сделано только на 1 аргумент, а мне бы на любое число
error: '#' is not followed by a macro parameter

UPD:
Работает если так:
#define DEBUG(...)                        \
printf("DEBUG: " __VA_ARGS__);
но мне надо отключать дебажилку. По этому сделал так:
#ifdef __DEBUG__
#define DEBUG(...) printf("DEBUG: " __VA_ARGS__);
#endif
но тут если не делать дефайна __DEBUG__ то получаю ошибку ведь DEBUG получается неопределен. Как тогда в противном случае можно определить DEBUG чтобы он ничего не делал?
#ifdef __DEBUG__
  #define DEBUG(...) printf("DEBUG: " __VA_ARGS__);
#else
  // Что тут писать чтобы объявить DEBUG() который ничего не делает?
#endif
  • Вопрос задан
  • 2522 просмотра
Решения вопроса 1
@mamkaololosha
#ifdef __DEBUG__
  #define DEBUG(...) printf("DEBUG: " __VA_ARGS__);
#else
  #define DEBUG(...)
#endif

ну а как еще?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы