Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 144

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 138 139 140 141 142 143 < 144 > 145 146 147 148 149 150 .. 316 >> Следующая

void f (int, int = 7 );
делает возможными вызовы и f(6), и f(6,5). При этом инициализация параметра во втором взове игнорируется. Соответствие параметров в случае инициализации, которая не игнорируется, обеспечивается соглашением о сохранении порядка неинициализированных параметров.
онятно, что инициализация параметров не приводит к появлени нового механизма параметризации. Это просто одно из прагматических соглае-ний, которое разработчики трансляторов могут иметь ввиду для составления более качественного объектного кода.
Читатель может сам написать кучу двусмысленных вызовов при совместном использовании инициализированнх параметров и полиморфизма: у эти-то две возмо ности мо но реительно не рекомендовать использовать для процедур с одним и тем же именем!
есколько слов о возмо ности не фиксировать число параметров, предоставляемой в С/С++. На уровне вызова процедуры эта ситуация выглядит просто: все фактические параметры один за другим загру а тся в стек. Тем самым транслятор исходит из предполо ения о том, что формальнх параметров для идентификации загру енных в стек значений достаточно. вся нагрузка определения того, что леит в стеке, а так е реение задачи сопоставления фактических параметров формальным переносится на уровень алгоритма процедуры. В частности, если специально не позаботиться о разборе загру енных значений, то мо но просто потерять передаваеме дан-не либо использовать значение одного типа как значение совсем другого.
Стандартнй прием работы с переменным числом фактических параметров — использование массива, который оказывается инициализированным ими. Часто применяется и такой прием: первый параметр задает формат того, что за значения задан в списке параметров, каково их количество. Распознавание этого формата в алгоритме процедуры дает возмо ность правильно использовать полученные значения. римерами такого рода слу ат функции
410
ГЛАВА 8. ПОДПРОГРАММЫ
scanf и printf, требующие передачи им формата параметров в виде строки, но это далеко не единственный вид формата.
8.5.3. Механизмы передачи параметров
бычные механизм языков программирования, используемые для передачи параметров, сводятся к следуим четырем видам:
1. передача параметра по значению, когда перед выполнением алгоритма процедуры (на фазе подготовки к выполнени ) для такого параметра в локальном контексте процедуры выделяется специальная переменная, именуемая идентификатором формального параметра, которая получает значение фактического параметра;
2. передача параметра как переменной, при которой фактический параметр, соответствуий формальному, дол ен бть переменной, замещающей все вхождения имени формального параметра в теле процедуры на фазе выполнения ее алгоритма;
3. передача параме ра по наименовани , когда при исполнении вызова подпрограммы на фазе выполнения ее алгоритма имитируется подмена в теле подпрограммы всех вхо дений имени формального параметра на текстуальное представление фактического параметра;
4. передача параметра по ссылке, когда при исполнении вызова подпрограммы на фазе вполнения ее алгоритма формальнй параметр заменяется на адрес фактического параметра.
5. передача параметра по необходимости, при которой фактическая передача параметра осуществляется в точности в тех случаях и в то время, когда вычисления приводят к ситуации, требующей этого. Этот механизм ва ен концептуально, но пока что редко применяется на практике.
ельзя считать все эти механизмы взаимно независимми. бчно одни из них выражаются через другие. Так, через передачу параметра по значению реализуется ссылочная параметризация, которая по своей сути есть специально оформленный вариант передачи переменной.
ля пояснения введенных понятий ни е приводятся примеры, в которх описание параметра задано в синтаксисе языков С/С++, Pascal или в подоб-
8.5.
411
ной им манере, когда указанне языки не предусматрива т соответству -щий механизм.
Семантика параметра, передаваемого по значению (короче — параметра-значения), с точность до указаннх в определении действий, ничем не отличается от обычной переменной локального контекста. анный механизм совершенно точно реализует in-параметры, и в этой связи он представляется наиболее простым. Именно он является единственным механизмом задания параметризации в языке С/С++, с помощью которого моделируется все остальные. ля такого моделирования, а так е для максимально возмо ного сокраения записи, приведения типов задействованы более чем на полну моность. Это обусловлено привязкой языка к маинному представлени алгоритмов и данных.
В Pascal формальные параметры-значения указываются в заголовке подпрограмм в том виде, которй используется для описания переменных (опускается служебное слово var):
procedure P (x : Integer); begin
a := x; x := 1; end;
Для С/С++ этот пример (с точностью до описания вырабатываемого функцией значения, т. е. служебного слова void) будет отличаться только на уровне конкретного синтаксиса:
void P ( int x )
{
a = x; x = 1;
}
В заголовках процедур описан один формальный параметр, поименован-нй как x. спользование процедуры P возмо но с единственным фактическим параметром-выра ением, вырабатываим целочисленное значение или с веественнм параметром-вра ением, если язк определяет, что его значение при присваивании округляется до целого — т. е. имеет место приведение вещественного значения к целому.14 Интересно, что вызов процедуры
Предыдущая << 1 .. 138 139 140 141 142 143 < 144 > 145 146 147 148 149 150 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100