2. Если кому-то нравятся фишки от C++, C#, Java и т.п. - то пользуйтесь теми языками, никто Вам не мешает.
3. Предопределение переменных удобно по той причине, что открывая чужую процедуру внечале смотришь блок переменных, а затем уже читаешь код. Когда переменная определена где-то в теле, то не всегда легко увидеть определение ее типа, да и комментарии там вряд ли будут. Особенно если переменная определена внутри цикла.
4. Паскаль со своими строгостями подталкивает программиста к определенному стилю программирования. И это очень хорошо, т.к. реально облегчает сопровождение чужого кода. Я много сопровождаю чужого кода. И на паскале намного меньше проблем с сопровождением, чем в других языках, в т.ч. по причине объявления переменных в своем блоке.
5. Объявление локальных переменных внутри зоны видимости некого структурного блока в некоторых случаях полезно, т.к. например, не дает использовать значение переменной после цикла, но и тот же С++ и прочие языки не зепрещают определеть переменные и в самом начале, т.е. гарантию никто не дает. А многостилие оно приводит к ошибкам. Кроме того, выход из зоны видимости не приводит к освобождению памяти под переменные, т.к. память выделена в стеке, хотя эта область памяти может использоваться дальше под другую переменную. Но такая экономия копеечна.
6. Для указателей на объекты или структуры памяти, выход ее из области видимости не приводит к освобождению памяти в C++ идругих языках без сборщика мусора. Основные проблемы в том же C++ возникают, когда на локальную переменную делаются указатели или указатель дублируется в несколько переменных с разной областью видимости.
Например:
- Код: Выделить всё
char *bbb;
{
char aaa[100];
bbb=&aaa[5];
}
//теперь bbb указывает непонятно на что
Компилятор такие штуки пропускает, т.к. у локальных переменных нет счетчика ссылок, так что определение переменных внутри кода может и реально приводит к множеству багов у не очень опытных программеров.[/quote]