Питер, вы могли бы также спросить, является ли vi или EMACS лучшим редактором. (EMACS, между прочим.) Многие люди считают препроцессор C ужасной идеей; Страуструп и Джим Гослинг среди них. Вот почему у Java нет препроцессора, и есть бесчисленное множество вещей, которые Stroustrup поместил в C ++, от const
до шаблонов, чтобы избежать использования препроцессора.
Есть другие люди, которым удобно добавлять новый язык, как в этом коде.
Если вы прочитаете оригинальный код оболочки Bourne, вы обнаружите, что он выглядит как
IF a == b THEN
do_something();
do_more();
ELSE
do_less();
FI
Стив Борн в основном использовал макросы, чтобы придать ему вид, похожий на Algol68 (тогда это был действительно классный язык). С кем-то, кроме Стива Борна, работать может быть очень сложно.
Затем взгляните на конкурс «Запутанный С», где некоторые из самых удивительных запутываний используют преимущества #define
.
Лично я не особо возражаю, хотя этот пример немного устрашает (как вы отлаживаете это?), Но работа такого рода работает без сети; там не так много валенд.