лексически и число итераций известно заранее, т.е. до момента входа в этот
оператор ( если только выход из этого оператора не осуществляется с помощью
оператора перехода goto ). Эти свойства оператора цикла for в языке Паскаль
улучшают «удобочитаемость» программ и облегчает их верификацию. К
сожалению, приращение переменной цикла for в Паскале ограничено лишь
значениями +1 и -1, что является серьезным неудобством.
В Паскале отсутствуют операторы безусловной передачи управления,
аналогичные оператору завершения break и оператору продолжения continue в
языке Си. Это вынуждает использовать оператор перехода goto или
дополнительные переменные, обеспечивающие возможность выявления
исключительных ситуаций. Кроме того, необходимо отметить недостаток
оператора goto в языке Паскаль, связанный с тем, что в качестве меток
используют не мнемонические обозначения, а целые значения без знака.
Неявное преобразование типов в процессе выполнения оператора
присваивания в Паскале разрешено только в двух случаях - от типа с более
узким диапазоном к типу с более широким диапазоном для ограниченных
(интервальных) типов и от целого к вещественному. В Си неявное
преобразование типов в процессе выполнения оператора присваивания
разрешено всегда независимо от типов операндов в левой и правой частях
оператора присваивания.
2.3. Структура программ.
Язык Паскаль навязывает жесткую последовательность расположения
частей программы для обеспечения возможности проведения однопроходной
трансляции. Тело программы располагается не непосредственно за описанием
данных, а отделяется от него описанием процедур и функций. Это ухудшает
«удобочитаемость» программ. В Си имеются лучшие средства структуризации
программ. В частности, переменные могут быть описаны в начале любого
блока, что стимулирует использование локальных переменных.
В отличие от Си в Паскале существует два типа подпрограмм -
подпрограммы, возвращающие некоторое значение (функции), и
подпрограммы, не возвращающие никакого значения (процедуры). Введение в
Паскаль двух типов подпрограмм преследовало цель улучшения
«удобочитаемости». Функции в Паскале могут возвращать значения любых
скалярных типов или указатели, кроме значения структурированных типов. В
языке Си функции могут возвращать значения любых типов, кроме массивов. В
отличие от языка Си в Паскале допускается вложенность процедур и функций
друг в друга.
В Паскале число фактических параметров должно быть равно числу
формальных параметров, указанных при описании подпрограммы. В частности,
невозможно написать подпрограмму, имеющую переменное число параметров.
В языке Си можно написать функцию, имеющую переменное число параметров,
но реализация таких функций, как правило, оказывается машинно-зависимой,
что приводит к потере мобильности.
В отличие от Си в Паскале подпрограммы завершаются только в
результате выполнения последнего оператора подпрограммы. Это соответствует
философии структурного программирования, в соответствии с которой каждая
языковая конструкция должна иметь ровно один вход и ровно один выход.
Однако с практической точки зрения это оказывается не совсем удобно,
поскольку требует использования оператора перехода goto.