Parametry
Argumenty to nazwy wartości przekazywanych do funkcji przez wywołanie funkcji. Parametry to wartości, których oczekuje funkcja. W prototypie funkcji nawiasy po nazwie funkcji zawierają pełną listę parametrów funkcji i ich typów. Deklaracje parametrów określają typy, rozmiary i identyfikatory wartości przechowywanych w parametrach.
Składnia
function-definition
:
declaration-specifiers
opt opt attribute-seq
declarator
declaration-list
compound-statement
/* attribute-seq
jest specyficzny dla firmy Microsoft */
declarator
:
pointer
Zdecydować direct-declarator
direct-declarator
: /* Deklarator funkcji */
direct-declarator
(
parameter-type-list
)
/* Deklarator w nowym stylu */
direct-declarator
(
identifier-list
opt )
/* Deklarator w stylu przestarzałym */
parameter-type-list
: /* Lista parametrów */
parameter-list
parameter-list
, ...
parameter-list
:
parameter-declaration
parameter-list
,
parameter-declaration
parameter-declaration
:
declaration-specifiers
declarator
declaration-specifiers
abstract-declarator
Zdecydować
Jest parameter-type-list
to sekwencja deklaracji parametrów rozdzielonych przecinkami. Formularz każdego parametru na liście parametrów wygląda następująco:
register
opt opt opttype-specifier
declarator
Parametry funkcji zadeklarowane za pomocą atrybutu auto
generują błędy. Identyfikatory parametrów są używane w treści funkcji w celu odwoływania się do wartości przekazanych do funkcji. Parametry można nazwać w prototypie, ale nazwy wykraczają poza zakres na końcu deklaracji. Oznacza to, że nazwy parametrów można przypisać w ten sam sposób lub inaczej w definicji funkcji. Tych identyfikatorów nie można ponownie zdefiniować w najbardziej zewnętrznym bloku treści funkcji, ale można je ponownie zdefiniować w blokach wewnętrznych, zagnieżdżonych tak, jakby lista parametrów była blokiem otaczającym.
Każdy identyfikator w parameter-type-list
pliku musi być poprzedzony odpowiednim specyfikatorem typu, jak pokazano w tym przykładzie:
void new( double x, double y, double z )
{
/* Function body here */
}
Jeśli co najmniej jeden parametr występuje na liście parametrów, lista może kończyć się przecinkiem, po którym następuje trzy kropki (, ...
). Ta konstrukcja, nazywana notacją wielokropka, wskazuje zmienną liczbę argumentów funkcji. (Aby uzyskać więcej informacji, zobacz Wywołania ze zmienną liczbą argumentów). Jednak wywołanie funkcji musi mieć co najmniej tyle argumentów, ile parametrów znajduje się przed ostatnim przecinkiem.
Jeśli do funkcji nie mają być przekazywane żadne argumenty, lista parametrów jest zastępowana przez słowo kluczowe void
. To użycie void
programu różni się od jego użycia jako specyfikatora typu.
Kolejność i typ parametrów, w tym wszelkie zastosowania notacji wielokropka, muszą być takie same we wszystkich deklaracjach funkcji (jeśli istnieją) i w definicji funkcji. Typy argumentów po zwykłych konwersjach arytmetycznych muszą być zgodne z typami odpowiednich parametrów. (Zobacz Zwykłe konwersje arytmetyczne w celu uzyskania informacji na temat konwersji arytmetycznych). Argumenty po wielokropkach nie są sprawdzane. Parametr może mieć dowolny podstawowy, strukturę, unię, wskaźnik lub typ tablicy.
Kompilator wykonuje zwykłe konwersje arytmetyczne niezależnie na każdym parametrze i w każdym argumencie, jeśli to konieczne. Po konwersji żaden parametr nie jest krótszy niż int
parametr , a żaden parametr nie ma float
typu, chyba że typ parametru jest jawnie określony w float
prototypie. Oznacza to na przykład, że deklarowanie parametru jako char
elementu ma taki sam efekt, jak deklarowanie go jako int
.