Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции (Ведищев) + шпоры к экзамену / лекции по программированию за 1 курс.doc
Скачиваний:
170
Добавлен:
20.06.2014
Размер:
805.38 Кб
Скачать

Формальные параметры.

Переменные, которые принимают значения, передаваемые функции при вызове в соответствии с порядком следования их имен в списке параметров. Список параметров содержит в ( ) идентификаторы, разделенные запятыми с указанием типа. Список может быть пустым, в этом случае также ограничивается ( ). После последнего идентификатора в списке параметров может быть записана, … - означает, что число параметров функции переменно, но не меньше, чем следует идентификаторов до многоточия.

Для доступа к значениям параметров, имена которых не заданы в списке формальных параметров, рекомендуется использовать макроопределения:

va_arg; va_end; va_start;

Допускается список параметров только из многоточия. Это означает, что число параметров переменной может быть =0.

Формальные параметры могут иметь базовый тип, либо быть struct, union, указателем или массивом. Указание первой (единственной)размерности для массива не обязательно. Массив воспринимается как указатель на тип элементов массива.

char s[ ]; char S[10]; char*S т.е. для формальных параметров эти 3 определения эквивалентны.

Параметры могут иметь класс памяти auto или registr( по умолчанию auto) . Если параметр представлен, но не объявлен, то предполагается int.

Идентификаторы формальных параметров не могут совпадать с идентификаторами переменных внутри тела функции, но возможно локальное переобъявление формальных параметров внутри вложенных блоков функции.

В объявлении формальных параметров не может перечисляться никакой другой идентификатор, кроме перечисленных в списке параметров. если имеется переменное число параметров, то программист отвечает за определение числа при вызове и получение их из стека функции.

Тип каждого формального параметра должен соответствовать типу фактического аргумента и типу соответствующего аргумента в списке типов аргументов функции в предварительном объявлении со списком типов.

Компилятор преобразует по умолчанию, отдельно над типом каждого формального параметра и фактического аргумента. После преобразования все формальные параметры имеют тип размером не меньшим, чем int и ни один из формальных параметров не имеет тип float.если используется модификаторы near, far, huge компилятор также может неявно провести преобразование аргументов указателей. Метод преобразования зависит от размера указателей в выбранной модели памяти и от наличия или отсутствия списка типов. Тип каждого формального параметра после преобразования определяет как интерпретируются размещенные в стеке аргументы, несоответствие типов фактических аргументов типам формальных параметров может привести к неверной интерпретации. Например, если в качестве аргумента передается 16-битовый указатель, и соответствующий формальный параметр объявлен как 32-битный, то вместо 16 бит из стека будут проинтерпретированы 32 бита, что повлечет за собой изменение значения указателя и других параметров, которые следуют за этим. Ошибки такого рода можно исключить, используя объявление функции со списком типов аргументов. Если функции не имеют аргументов, то рекомендуется использовать ключевое слово point.