Несмотря на все усилия комитета по стандартизации,
#include и #define по-прежнему живут в каждом проекте. Препроцессор — это, по сути, отдельный язык, работающий до компиляции, и он ничего не знает о типах, областях видимости и прочих правилах C++.Главная проблема — текстовая подстановка. Макрос не проверяет типы, не уважает пространства имён и может сломать код в самом неожиданном месте. Классический пример:
#define max(a,b) ((a)>(b)?(a):(b)) — попробуйте передать туда i++, и получите двойной инкремент.Современный C++ предлагает альтернативы почти для каждого сценария:
constexpr, consteval, inline-функции, шаблоны. Но полностью убить препроцессор пока не удалось.✏️ А в вашем проекте много макросов, или удалось от них почти избавиться?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик