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 подскажет развёрнутый ответ в реальном времени.