Definizioni di funzione 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 anche un corpo della funzione con le dichiarazioni delle variabili locali e le istruzioni che determinano le operazioni eseguite dalla 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 optareattribute-seqoptaredeclaratordeclaration-listoptarecompound-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 optaredirect-declarator

direct-declarator: /* Dichiaratore di funzione */
  direct-declarator ( parameter-type-list ) /* Dichiaratore di nuovo stile */
  direct-declarator ( identifier-list optare) /* Dichiaratore di stile obsoleto */

L'elenco di parametri in una definizione usa 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 precedente usa 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 optarestatement-listoptare}

Gli unici identificatori di classe di archiviazione che possono modificare una dichiarazione di funzione sono extern e static. L'identificatore extern indica che è possibile fare riferimento alla funzione da altri file, ovvero il nome della funzione viene esportato nel linker. L'identificatore static indica che non è possibile fare riferimento alla funzione da altri file, ovvero il nome non viene esportato dal linker. Se non viene visualizzata alcuna classe di archiviazione in una definizione di funzione, extern si presuppone . In ogni caso, la funzione è sempre visibile dal punto di definizione alla fine del file.

I valori facoltativi declaration-specifiers e obbligatori declarator specificano insieme il tipo e il nome restituiti della funzione. declarator è una combinazione dell'identificatore che denomina la funzione e le parentesi che seguono 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 prototipo di funzione per le chiamate successive 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 funzione, Classe di archiviazione, Tipo restituito, Parametri e Corpo della funzione descrivono in dettaglio i componenti della definizione della funzione.

Vedere anche

Funzioni