Mediumvariadic-macros

Что такое variadic macros (C++11)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Variadic macros принимают переменное число аргументов через __VA_ARGS__.

#define LOG(fmt, ...) printf(fmt, __VA_ARGS__)

LOG("x=%d, y=%d\n", x, y);
// → printf("x=%d, y=%d\n", x, y);

// Проблема trailing comma при пустых ...:
// LOG("hello"); → printf("hello",);  // ОШИБКА

// Решение в C++20: __VA_OPT__
#define LOG2(fmt, ...) printf(fmt __VA_OPT__(,) __VA_ARGS__)
LOG2("hello");   // → printf("hello");  (запятая не подставляется)

Применяют для логирования, assertions, printf-подобных обёрток. Для compile-time type-safe кода лучше variadic templates.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.