Definizioni di funzioni C
Una definizione di funzione specifica il nome della funzione, i tipi e il numero di parametri che prevede di ricevere e il relativo tipo restituito. Una definizione di funzione include inoltre un corpo della funzione con le dichiarazioni delle variabili locali e le istruzioni che determinano ciò che svolge la funzione.
Sintassi
translation-unit
:
external-declaration
translation-unit
external-declaration
external-declaration
: /* Consentito solo nell'ambito esterno (file) */
function-definition
declaration
function-definition
:
declaration-specifiers
opt opt declarator
declaration-list
attribute-seq
compound-statement
/* attribute-seq
è specifico di Microsoft */
I parametri del prototipo sono:
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
optare
type-specifier
declaration-specifiers
optare
type-qualifier
declaration-specifiers
optare
declaration-list
:
declaration
declaration-list
declaration
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 */
L'elenco di parametri in una definizione utilizza questa sintassi:
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
L'elenco di parametri in una definizione di funzione obsoleta utilizza questa sintassi:
identifier-list
: /* Usato nelle definizioni e nelle dichiarazioni di funzioni obsolete */
identifier
identifier-list
,
identifier
La sintassi per il corpo della funzione è:
compound-statement
:
{
declaration-list
opt opt opt statement-list
}
Gli unici identificatori di classe di archiviazione che possono modificare una dichiarazione di funzione sono extern
e static
. L'identificatore extern
significa che è possibile far riferimento alla funzione da altri file; ovvero il nome della funzione viene esportato al linker. L'identificatore static
indica che non è possibile fare riferimento alla funzione da altri file, ovvero il nome non viene esportato dal linker. Se in una definizione di funzione non viene visualizzata nessuna classe di archiviazione, viene previsto extern
. Tuttavia, la funzione è sempre visibile dal punto della definizione fino alla fine del file.
I valori facoltativi declaration-specifiers
e obbligatori declarator
specificano insieme il tipo e il nome restituiti della funzione. Il declarator
è una combinazione dell'identificatore che denomina la funzione e le parentesi dopo il nome della funzione. Il non determiniale facoltativo attribute-seq
è una funzionalità specifica di Microsoft definita in Attributi funzione.
( direct-declarator
nella declarator
sintassi) specifica il nome della funzione definita e gli identificatori dei relativi parametri. Se include direct-declarator
, parameter-type-list
l'elenco specifica i tipi di tutti i parametri. Tale dichiaratore funge anche da un prototipo di funzione per le successive chiamate alla funzione.
Un declaration
oggetto nelle definizioni di declaration-list
funzione non può contenere un oggetto storage-class-specifier
diverso da register
. L'oggetto type-specifier
nella declaration-specifiers
sintassi può essere omesso solo se la register
classe di archiviazione è specificata per un valore di int
tipo .
compound-statement
è il corpo della funzione contenente dichiarazioni di variabili locali, riferimenti a elementi dichiarati esternamente e istruzioni.
Le sezioni Attributi di funzioni, Classi di archiviazione, Tipo restituito, Parametri e Corpo della funzione descrivono in dettaglio i componenti della definizione della funzione.