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


Параметры

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

Синтаксис

function-definition:
declaration-specifiersнеоб. attribute-seqнеоб. declarator declaration-listнеоб. compound-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-specifiers abstract-declaratorнеоб.

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

registerнеоб. type-specifier declaratorнеоб.

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

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

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

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

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

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

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

См. также

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