budden писал(а):
C++ местами очень неплох. К сожалению, к ним добавлены и другие места, которые перечёркивают плюсы.
Препроцессор нужен. В С++ он ещё недостаточно мощный. Был бы он нормальный - шаблоны стали бы его частным случаем. Проблема в другом. Если есть 10 #define-ов, которые только лишь проверяются #ifdef-ами (т.е. они по сути являются булевыми константами, параметризующими исходный код), то данная программа - это 1024 разные программы. #ifdef ДРУГАЯ_ОПЕРАЦИОННАЯ_СИСТЕМА для анализа такой программы требует наличия заголовочных файлов от другой операционной системы, а таковых файлов нет. То же происходит и в случае, когда используются макросы, определённые в заголовочных файлах отсутствующей системы.
Кроме того, нет формального описания того, какие #define или их комбинации вообще имеют смысл.
Препроцессор к языку никакого отношения не имеет.
Препроцессор понадобился практически только для того, чтобы сделать модульность - посредством объединения исходных текстов.
Дефайны - это иепархия препроцессора, а не Си.
Вместо стандартного препроцессора можно поставить любой другой - и ничего практически не изменится.
Использование препроцессора - это в 69-70 году была неплохое практическое решение.
Ибо модули более-менее в приличном виде появились только в 70-х годах.
Причем - в Европе.
Американцы, озабоченные на всю голову идеей обратной совместимости (все ради экономии бабла!) даже не думали модифицировать С.
budden писал(а):
Далее, makefile недостаточно декларативен, а бывает ещё ./configure. По сумме всех этих факторов получается, что невозможно проанализировать программу на С статически. Как только эта проблема в таком формате осознана, можно пытаться её решить и у меня есть намётки, но я ими с вами делиться пока что не буду (а может быть, и никогда не буду). Но решение содержится в самой постановке, вы умные, сами догадаетесь.
А maker - вообще к языку отношения не имеет.
Опять же - неплохое практическое решение для начала 70-х.
Про сортировку я уже написал...
budden писал(а):
И сама по себе постановка задачи "критика С++" - это неправильная постановка задачи. Она закрывает вам путь к совершенствованию. Назвали бы "сильные и слабые места С++". "В чём брать пример с С++, а от чего бежать" - и была бы правильная.
Ну, тут каждый - в меру своей "испорченности"...