Parametri
Gli argomenti sono nomi dei valori passati a una funzione da una chiamata di funzione. I parametri sono i valori che la funzione prevede di ricevere. In un prototipo di funzione, le parentesi dopo il nome della funzione contengono un elenco completo dei parametri della funzione e dei relativi tipi. Le dichiarazioni di parametro specificano i tipi, le dimensioni e gli identificatori dei valori archiviati nei parametri.
Sintassi
function-definition
:
declaration-specifiers
opt opt declarator
declaration-list
attribute-seq
compound-statement
/* attribute-seq
è specifico di Microsoft */
declarator
:
pointer
optare direct-declarator
direct-declarator
: /* Dichiaratore di funzione */
direct-declarator
(
parameter-type-list
)
/* Dichiaratore di nuovo stile */
direct-declarator
(
identifier-list
opt )
/* Dichiaratore di stile obsoleto */
parameter-type-list
: /* Elenco di parametri */
parameter-list
parameter-list
, ...
parameter-list
:
parameter-declaration
parameter-list
,
parameter-declaration
parameter-declaration
:
declaration-specifiers
declarator
declaration-specifiers
abstract-declarator
optare
parameter-type-list
è una sequenza di dichiarazioni di parametri separate da virgole. Il formato di ogni parametro in un elenco di parametri è il seguente:
register
opt opt opttype-specifier
declarator
I parametri della funzione dichiarati con l'attributo auto
generano errori. Gli identificatori dei parametri vengono utilizzati nel corpo della funzione per fare riferimento ai valori passati alla funzione. È possibile assegnare un nome ai parametri in un prototipo, ma i nomi diventano esterni all'ambito alla fine della dichiarazione. Ciò significa che i nomi dei parametri possono essere assegnati allo stesso modo o in modo diverso nella definizione della funzione. Questi identificatori non possono essere ridefinito nel blocco più esterno del corpo della funzione, ma possono essere ridefinito in blocchi annidati interni come se l'elenco di parametri fosse un blocco di inclusione.
Ogni identificatore in parameter-type-list
deve essere preceduto dall'identificatore di tipo appropriato, come illustrato in questo esempio:
void new( double x, double y, double z )
{
/* Function body here */
}
Se nell'elenco dei parametri si verifica almeno un parametro, l'elenco può terminare con una virgola seguita da tre punti (, ...
). Questa costruzione, denominata "notazione con i puntini di sospensione", indica un numero variabile di argomenti passati alla funzione. Per altre informazioni, vedere Chiamate con un numero variabile di argomenti. Tuttavia, una chiamata alla funzione deve avere almeno il numero di argomenti presenti prima dell'ultima virgola.
Se alla funzione non deve essere passato alcun parametro, l'elenco dei parametri viene sostituito dalla parola chiave void
. Questo utilizzo di void
è diverso dal relativo utilizzo come identificatore di tipo.
L'ordine e il tipo di parametri, incluso qualsiasi utilizzo della notazione con i puntini di sospensione, devono essere identici in tutte le dichiarazioni di funzione, se presenti, e nella definizione di funzione. I tipi degli argomenti dopo le conversioni aritmetiche consuete devono essere compatibili con l'assegnazione dei tipi dei parametri corrispondenti. (Vedere Conversioni aritmetiche consuete per informazioni sulle conversioni aritmetiche. Gli argomenti che seguono i puntini di sospensione non vengono controllati. Un parametro può avere qualsiasi tipo fondamentale, di struttura, unione, puntatore o matrice.
Il compilatore, se necessario, esegue le conversioni aritmetiche consuete in modo indipendente su ogni parametro e ogni argomento. Dopo la conversione, nessun parametro è più breve di un int
parametro e nessun parametro ha float
tipo a meno che il tipo di parametro non venga specificato in modo esplicito come float
nel prototipo. Ciò significa, ad esempio, che dichiarando un parametro come un oggetto ha char
lo stesso effetto di dichiararlo come .int