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 następujące 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-specifiersZdecydowaćattribute-seqZdecydowaćdeclaratordeclaration-listZdecydowaćcompound-statement

/* attribute-seq jest specyficzny dla firmy Microsoft */

declarator:
pointerZdecydowaćdirect-declarator

direct-declarator: /* Deklarator funkcji */
direct-declarator(parameter-type-list) /* Deklarator w nowym stylu */
direct-declarator(identifier-listZdecydować) 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-specifiersabstract-declaratorZdecydować

Jest parameter-type-list to sekwencja deklaracji parametrów rozdzielonych przecinkami. Forma każdego parametru na liście parametrów wygląda następująco:

registerZdecydowaćtype-specifierdeclaratorZdecydować

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 przypisywać 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 wewnętrznych, zagnieżdżonych blokach tak, jakby lista parametrów była otaczającym blokiem.

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 na liście parametrów występuje co najmniej jeden parametr, 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 elementu różni się od jego użycia jako specyfikatora typu.

Kolejność i typ parametrów, w tym użycie notacji wielokropka, musi być takie samo we wszystkich deklaracjach funkcji (jeśli istnieje) 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 , aby uzyskać informacje na temat konwersji arytmetycznych). Argumenty po wielokropeku nie są sprawdzane. Parametr może mieć dowolny typ podstawowy, struktury, unii, wskaźnika lub tablicy.

Kompilator wykonuje zwykłe konwersje arytmetyczne niezależnie od każdego parametru i każdego argumentu, jeśli to konieczne. Po konwersji żaden parametr nie jest krótszy niż intparametr , a żaden parametr nie ma float typu, chyba że typ parametru jest jawnie określony jako float w prototypie. Oznacza to na przykład, że deklarowanie parametru jako char elementu ma taki sam efekt, jak deklarowanie go jako int.

Zobacz też

Definicje funkcji języka C