Предварительная обработка C может делать действительно изящные вещи, но если вы посмотрите на вещи, которые он использует, вы поймете, что это часто просто для добавления другого уровня абстракции.
- Предварительная обработка для разных операций на разных платформах? Это в основном слой абстракции для независимости от платформы.
- Предварительная обработка для простого добавления сложного кода? Абстракция, потому что язык недостаточно универсален.
- Предварительная обработка для добавления расширений в ваш код? Абстракция, потому что ваш код / ваш язык недостаточно гибок.
Итак, мой ответ: вам не нужен препроцессор, если ваш язык достаточно высокоуровневый *. Я бы не назвал предварительную обработку злом или бесполезным, я просто говорю, что чем более абстрактным становится язык, тем меньше у меня причин думать, что ему нужна предварительная обработка.
* Что достаточно высокого уровня? Это, конечно, совершенно субъективно.
РЕДАКТИРОВАТЬ: Конечно, я действительно имею в виду только макросов . Использование препроцессоров для взаимодействия с другими файлами кода или для определения констант является злом.