Часто повторяющиеся участки программы, да и просто функционально законченные фрагменты кода, рекомендуется выделять в процедуры. Объявление процедуры производится в любой части программы до ее первого использования (и, конечно, до начала основной программы) следующим образом:
разделенных точками с запятой, где именем параметра является идентификатор, с которым ассоциируется значение фактически переданного процедуре параметра (именно значение, а не переменная, передаваемая в качестве параметра), а типом параметра – стандартный или ранее определенный тип. Если перед именем параметра стоит ключевое слово Var, то изменение данного параметра в теле процедуры приведет к изменению значения переменной, переданной в качестве параметра.
При этом производится выталкивание в стек передаваемых параметров и адреса возврата, выделение в стеке места под объявленные в процедуре переменные и переход к выполнению первого оператора тела процедуры. По достижении конца тела процедуры (слова End) внутренние (локальные) переменные процедуры удаляются из стека и происходит переход к оператору, следующему за вызовом процедуры.
Единственным отличием функций от процедур является возможность возврата некоторого значения. Указание конкретного значения, возвращаемого функций, производится путем присваивания в теле функции идентификатору имени функции данного значения. Естественно, что таких присваиваний может быть несколько, при этом значение, возвращаемое функцией, будет зависеть от того, какое из таких присваиваний было произведено последним.
Аналогичным образом выполняются функции. Объявление функции выглядит так:
Function <имя_функции> [(<список_параметров>)]:
тип_результата;
[Var часть]
[Const часть]
Begin
{тело функции}
[<операторы>]
End;
В Turbo Pascal, начиная с версии 7.0, возможен вызов функции без использования возвращаемого ею значения – аналогично процедуре. Так как при возврате значение функции находится, за редким исключением, в регистрах процессора, накладываются ограничения на типы результатов, возвращаемых функциями. Функции могут возвращать значения простых типов и строки.