Параметры
Аргументы — это имена значений, переданных в функцию в результате вызова функции. Параметры — это значения, которые ожидает получить функция. В прототипе функции в круглых скобках после имени функции содержится полный список параметров функции и их типов. Объявления параметров определяют типы, размеры и идентификаторы значений, хранящихся в параметрах.
Синтаксис
function-definition
:
declaration-specifiers
optattribute-seq
optdeclarator
declaration-list
optcompound-statement
/* attribute-seq
используется только в системах Майкрософт */
declarator
:
pointer
необ.direct-declarator
direct-declarator
: /* Оператор объявления функции */
direct-declarator
(
parameter-type-list
)
/* Оператор объявления нового стиля */
direct-declarator
(
identifier-list
opt)
/* Оператор объявления старого стиля */
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
opttype-specifier
declarator
opt
Параметры функции, объявленные с атрибутом auto
, создают ошибки. Идентификаторы параметров используются в теле функции для ссылки на значения, переданные в функцию. Параметрам можно присвоить имена в прототипе, но имена выходят за пределы области в конце объявления. Поэтому имена параметров можно присвоить таким же образом или по-другому в определении функции. Эти идентификаторы невозможно переопределить в крайнем блоке тела функции, но их можно переопределить во внутренних вложенных блоках, как если бы список параметров был внешним блоком.
Каждому идентификатору в parameter-type-list
должен предшествовать соответствующий описатель типа, как показано в следующем примере:
void new( double x, double y, double z )
{
/* Function body here */
}
Если в списке имеется хотя бы один параметр, то список может заканчиваться запятой и тремя точками ( , ...
). Эта конструкция, называемая нотацией с многоточием, указывает переменное число аргументов функции. (Дополнительные сведения см. в статье Вызовы с переменным количеством аргументов.) Однако в вызове функции должно быть как минимум столько аргументов, сколько параметров имеется перед последней запятой.
Если аргументы не требуется передавать в функцию, список параметров заменяется ключевым словом void
. В данном случае использование ключевого слова void
отличается от его использования в качестве описателя типа.
Порядок и тип параметров, включая любое использование нотации с многоточием, должны быть одинаковыми во всех объявлениях функций (если есть) и в определении функции. Типы аргументов после обычных арифметических преобразований должны быть совместимы по назначению с типами соответствующих параметров. (Дополнительные сведения об арифметических преобразованиях см. в статье Обычные арифметические преобразования.) Аргументы после многоточия не проверяются. Параметр может иметь любой основной тип, тип структуры, объединения, указателя или массива.
Компилятор выполняет обычные арифметические преобразования отдельно для каждого параметра и для каждого аргумента при необходимости. После преобразования параметры имеют длину не менее int
и никогда не имеют типа float
, если для конкретного параметра в прототипе явно не задан тип float
. Это означает, например, что объявление параметра как char
будет иметь тот же эффект, что и его объявление как int
.
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по