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-declarationtranslation-unit external-declaration
external-declaration: /* Consentita solo in ambito esterno (file) */
function-definitiondeclaration
function-definition: /*Qui il dichiaratore è il dichiaratore di funzione */
declaration-specifiers opt attribute-seq opt declarator declaration-list opt compound-statement/* attribute-seq è specifico di Microsoft */
I parametri del prototipo sono:
declaration-specifiers:
storage-class-specifier declaration-specifiers opttype-specifier declaration-specifiers opt
type-qualifier declaration-specifiers opt
declaration-list:
declarationdeclaration-list declaration
declarator:
pointer opt direct-declaratordirect-declarator: /* dichiaratore di funzione */
direct-declarator ( parameter-type-list ) /* Dichiaratore nuovo stile */direct-declarator ( identifier-list opt ) /* Dichiaratore stile obsoleto */
L'elenco di parametri in una definizione utilizza questa sintassi:
parameter-type-list: /* Elenco di parametri */
parameter-listparameter-list**, ...**
parameter-list:
parameter-declarationparameter-list**,** parameter-declaration
parameter-declaration:
declaration-specifiers declaratordeclaration-specifiers abstract declarator opt
L'elenco di parametri in una definizione di funzione obsoleta utilizza questa sintassi:
identifier-list: /* Utilizzato nelle definizioni di funzione e nelle dichiarazioni obsolete */
identifieridentifier-list**,** identifier
La sintassi per il corpo della funzione è:
- compound-statement: /* Corpo della funzione */
{ declaration-list opt statement-list opt }
Gli unici identificatori della classe di archiviazione che consentono di modificare una dichiarazione della 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 significa che non è possibile far 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.
Gli elementi declaration-specifiers facoltativi e il declarator obbligatorio insieme specificano il tipo restituito e il nome della funzione. Il declarator è una combinazione dell'identificatore che denomina la funzione e le parentesi dopo il nome della funzione. L'elemento attribute-seq facoltativo, non terminale è una funzionalità specifica Microsoft definita in Attributi di funzione.
L'elemento direct-declarator (nella sintassi declarator) specifica il nome della funzione definita e gli identificatori dei relativi parametri. Se direct-declarator include 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.
declaration in declaration-list nelle definizioni di funzione non può contenere un storage-class-specifier diverso da register. type-specifier nella sintassi declaration-specifiers può essere omesso solo se la classe di archiviazione register viene specificata per un valore di tipo int.
compound-statement è il corpo della funzione che contiene le dichiarazioni delle variabili locali, i riferimenti agli elementi dichiarati esternamente e le istruzioni.
Nelle sezioni Attributi di funzione, Classe di archiviazione, Tipo restituito, Parametri e Corpo della funzione vengono descritti dettagliatamente i componenti della definizione di funzione.