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: /* Consentita solo in ambito esterno (file) */
function-definition

declaration

function-definition: /* Qui il dichiaratore è il dichiaratore di funzione */
declaration-specifiers optattribute-seq optdeclarator declaration-list optcompound-statement

/* attribute-seq è specifico di Microsoft */

I parametri del prototipo sono:

declaration-specifiers:
storage-class-specifier declaration-specifiers opt

type-specifier declaration-specifiers opt

type-qualifier declaration-specifiers opt

declaration-list:
declaration

declaration-list declaration

declarator:
pointer optdirect-declarator

direct-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 parametri */
parameter-list

parameter-list , ...

parameter-list:
parameter-declaration

parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator

declaration-specifiers abstract declarator opt

L'elenco di parametri in una definizione di funzione obsoleta utilizza questa sintassi:

identifier-list: /* Usato nelle definizioni di funzione e nelle dichiarazioni obsolete */
identifier

identifier-list , identifier

La sintassi per il corpo della funzione è:

compound-statement: /* Corpo della funzione */
{ declaration-list optstatement-list opt}

Gli unici identificatori della classe di archiviazione che consentono di 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 significa che non è possibile far riferimento alla funzione da altri file, ovvero che 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 specificano insieme 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 e 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.

Un 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.

Le sezioni Attributi di funzioni, Classi di archiviazione, Tipo restituito, Parametri e Corpo della funzione descrivono in dettaglio i componenti della definizione della funzione.

Vedere anche

Funzioni