Parametry
Argumenty jsou názvy hodnot předaných funkci voláním funkce. Parametry jsou hodnoty, které funkce očekává. V prototypu funkce obsahují závorky následující za názvem funkce úplný seznam parametrů funkce a jejich typů. Deklarace parametrů určují typy, velikosti a identifikátory hodnot uložených v parametrech.
Syntaxe
function-definition
:
declaration-specifiers
opt opt declarator
declaration-list
attribute-seq
compound-statement
/* attribute-seq
je specifický pro Microsoft */
declarator
:
pointer
volit direct-declarator
direct-declarator
: /* Deklarátor funkce */
direct-declarator
(
parameter-type-list
)
/* Deklarátor nového stylu */
direct-declarator
(
identifier-list
opt )
/* Zastaralé deklarátor stylu */
parameter-type-list
: /* Seznam parametrů */
parameter-list
parameter-list
, ...
parameter-list
:
parameter-declaration
parameter-list
,
parameter-declaration
parameter-declaration
:
declaration-specifiers
declarator
declaration-specifiers
abstract-declarator
volit
Jedná se parameter-type-list
o posloupnost deklarací parametrů oddělených čárkami. Tvar každého parametru v seznamu parametrů vypadá takto:
register
opt opttype-specifier
declarator
Parametry funkce deklarované pomocí atributu auto
generují chyby. Identifikátory parametrů se v těle funkce používají k odkazování na hodnoty předané funkci. Parametry můžete pojmenovat v prototypu, ale názvy končí oborem na konci deklarace. To znamená, že názvy parametrů se dají přiřadit stejným způsobem nebo jinak v definici funkce. Tyto identifikátory nelze znovu definovat v nejkrajnějším bloku těla funkce, ale dají se předefinovat ve vnitřních vnořených blocích, jako by seznam parametrů byl uzavřený blok.
Každému identifikátoru parameter-type-list
musí předcházet odpovídající specifikátor typu, jak je znázorněno v tomto příkladu:
void new( double x, double y, double z )
{
/* Function body here */
}
Pokud se v seznamu parametrů vyskytuje alespoň jeden parametr, může seznam končit čárkou následovanou třemi tečkami (, ...
). Tato konstrukce, označovaná jako "zápis tří teček", označuje proměnný počet argumentů funkce. (Další informace najdete v tématu Volání s proměnným počtem argumentů.) Volání funkce však musí mít alespoň tolik argumentů, kolik má parametry před posledním čárkou.
Pokud funkci nepředáte žádné argumenty, nahradí se seznam parametrů klíčovým slovem void
. Toto použití void
se liší od jeho použití jako specifikátor typu.
Pořadí a typ parametrů, včetně jakéhokoli použití zápisu se třemi tečkami, musí být stejné ve všech deklaracích funkcí (pokud existuje) a v definici funkce. Typy argumentů po obvyklých aritmetických převodech musí být kompatibilní s typy odpovídajících parametrů. (Viz Obvyklé aritmetické převody pro informace o aritmetických převodech.) Argumenty za třemi tečkou nejsou zaškrtnuté. Parametr může mít jakýkoli základní typ, strukturu, sjednocení, ukazatel nebo pole.
Kompilátor provádí obvyklé aritmetické převody nezávisle na každém parametru a na každém argumentu, pokud je to nutné. Po převodu není žádný parametr kratší než int
parametr a žádný parametr nemá float
typ, pokud není explicitně zadán jako float
v prototypu. To například znamená, že deklarování parametru jako char
parametr má stejný účinek jako deklarování jako .int