Поделиться через


Параметры

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

Синтаксис

function-definition:
declaration-specifiersoptattribute-seqoptdeclaratordeclaration-listoptcompound-statement

/* attribute-seq используется только в системах Майкрософт */

declarator:
pointerнеоб.direct-declarator

direct-declarator: /* Оператор объявления функции */
direct-declarator(parameter-type-list) /* Оператор объявления нового стиля */
direct-declarator(identifier-listopt) /* Оператор объявления старого стиля */

parameter-type-list: /* Список параметров */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiersabstract-declaratorнеоб.

parameter-type-list содержит последовательность объявлений параметров, разделенных запятыми. Форма каждого параметра в списке параметров выглядит следующим образом.

registeropttype-specifierdeclaratoropt

Параметры функции, объявленные с атрибутом auto , создают ошибки. Идентификаторы параметров используются в теле функции для ссылки на значения, переданные в функцию. Параметрам можно присвоить имена в прототипе, но имена выходят за пределы области в конце объявления. Поэтому имена параметров можно присвоить таким же образом или по-другому в определении функции. Эти идентификаторы невозможно переопределить в крайнем блоке тела функции, но их можно переопределить во внутренних вложенных блоках, как если бы список параметров был внешним блоком.

Каждому идентификатору в parameter-type-list должен предшествовать соответствующий описатель типа, как показано в следующем примере:

void new( double x, double y, double z )
{
    /* Function body here */
}

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

Если аргументы не требуется передавать в функцию, список параметров заменяется ключевым словом void. В данном случае использование ключевого слова void отличается от его использования в качестве описателя типа.

Порядок и тип параметров, включая любое использование нотации с многоточием, должны быть одинаковыми во всех объявлениях функций (если есть) и в определении функции. Типы аргументов после обычных арифметических преобразований должны быть совместимы по назначению с типами соответствующих параметров. (Дополнительные сведения об арифметических преобразованиях см. в статье Обычные арифметические преобразования.) Аргументы после многоточия не проверяются. Параметр может иметь любой основной тип, тип структуры, объединения, указателя или массива.

Компилятор выполняет обычные арифметические преобразования отдельно для каждого параметра и для каждого аргумента при необходимости. После преобразования параметры имеют длину не менее int и никогда не имеют типа float , если для конкретного параметра в прототипе явно не задан тип float . Это означает, например, что объявление параметра как char будет иметь тот же эффект, что и его объявление как int .

См. также

Определения функций в C