Condividi tramite


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-specifiersopt opt declarator declaration-list attribute-seq compound-statement

/* attribute-seq è specifico di Microsoft */

I parametri del prototipo sono:

declaration-specifiers:
storage-class-specifierdeclaration-specifiersoptare
type-specifierdeclaration-specifiersoptare
type-qualifierdeclaration-specifiersoptare

declaration-list:
declaration
declaration-list declaration

declarator:
pointeroptare direct-declarator

direct-declarator: /* Dichiaratore di funzione */
direct-declarator ( parameter-type-list ) /* Dichiaratore di nuovo stile */
direct-declarator ( identifier-listopt ) /* 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-specifiersabstract-declaratoroptare

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-listopt 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-listl'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.

Vedi anche

Funzioni