Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Argument är namn på värden som skickas till en funktion av ett funktionsanrop. Parametrar är de värden som funktionen förväntar sig att ta emot. I en funktionsprototyp innehåller parenteserna efter funktionsnamnet en fullständig lista över funktionens parametrar och deras typer. Parameterdeklarationer anger de typer, storlekar och identifierare för värden som lagras i parametrarna.
Syntax
function-definition:
declaration-specifiers
väljaattribute-seqväljadeclaratordeclaration-listväljacompound-statement
/*
attribute-seq är Microsoft-specifik */
declarator:
pointer
väljadirect-declarator
direct-declarator: /* En funktionsdeklarator */
direct-declarator
(
parameter-type-list
) /* Deklarator i ny stil */
direct-declarator
(
identifier-list
välja) /* Deklarator i föråldrad stil */
parameter-type-list: /* Parameterlistan */
parameter-list
parameter-list
, ...
parameter-list:
parameter-declaration
parameter-list
,
parameter-declaration
parameter-declaration:
declaration-specifiers
declarator
declaration-specifiers
abstract-declarator
välja
parameter-type-list är en sekvens med parameterdeklarationer avgränsade med kommatecken. Formen på varje parameter i en parameterlista ser ut så här:
registerväljatype-specifierdeclaratorvälja
Funktionsparametrar som deklareras med auto attributet genererar fel. Parametrarnas identifierare används i funktionstexten för att referera till de värden som skickas till funktionen. Du kan namnge parametrarna i en prototyp, men namnen hamnar utanför omfånget i slutet av deklarationen. Det innebär att parameternamn kan tilldelas på samma sätt eller på olika sätt i funktionsdefinitionen. Dessa identifierare kan inte omdefinieras i det yttersta blocket i funktionstexten, men de kan omdefinieras i inre kapslade block som om parameterlistan var ett omslutande block.
Varje identifierare i parameter-type-list måste föregås av lämplig typspecificerare, som du ser i det här exemplet:
void new( double x, double y, double z )
{
/* Function body here */
}
Om minst en parameter inträffar i parameterlistan kan listan sluta med ett kommatecken följt av tre perioder (, ...). Den här konstruktionen, som kallas "ellips notation", anger ett variabelt antal argument till funktionen. Mer information finns i Anrop med ett variabelt antal argument. Ett anrop till funktionen måste dock ha minst lika många argument som det finns parametrar före det senaste kommatecknet.
Om inga argument ska skickas till funktionen ersätts listan med parametrar med nyckelordet void. Den här användningen av void skiljer sig från dess användning som typspecificerare.
Ordningen och typen av parametrar, inklusive all användning av ellips notationen, måste vara densamma i alla funktionsdeklarationer (om några) och i funktionsdefinitionen. Argumenttyperna efter vanliga aritmetiska konverteringar måste vara tilldelningskompatibla med typerna av motsvarande parametrar. (Se Vanliga aritmetiska konverteringar för information om aritmetiska konverteringar.) Argument som följer ellipsen kontrolleras inte. En parameter kan ha valfri grundläggande typ, struktur, union, pekare eller matristyp.
Kompilatorn utför de vanliga aritmetiska konverteringarna oberoende av varje parameter och på varje argument, om det behövs. Efter konverteringen är ingen parameter kortare än en int, och ingen parameter har float typen såvida inte parametertypen uttryckligen anges som float i prototypen. Det innebär till exempel att deklarera en parameter som en char har samma effekt som att deklarera den som en int.