# C/Blocchi e funzioni/Funzioni

C
Copertina Tutti i moduli · Sviluppo
* LinguaggioC/Linguaggio
** PanoramicaC/Linguaggio/Panoramica
** Struttura del linguaggioC/Linguaggio/Struttura del linguaggio
* Variabili, operatori e costantiC/Variabili, operatori e costanti
** VariabiliC/Variabili, operatori e costanti/Variabili
** Operatori aritmeticiC/Variabili, operatori e costanti/Operatori aritmetici
** Operatori sui bitC/Variabili, operatori e costanti/Operatori sui bit
** CostantiC/Variabili, operatori e costanti/Costanti
* Blocchi e funzioniC/Blocchi e funzioni
** Blocchi if e switchC/Blocchi e funzioni/Blocchi if e switch
** Operatori logiciC/Blocchi e funzioni/Operatori logici
** CicliC/Blocchi e funzioni/Cicli
** FunzioniC/Blocchi e funzioni/Funzioni
** mainC/Blocchi e funzioni/main
** LibrerieC/Blocchi e funzioni/Librerie
** RicorsivitàC/Blocchi e funzioni/Ricorsività
* Vettori e puntatoriC/Vettori e puntatori
** VettoriC/Vettori e puntatori/Vettori
** PuntatoriC/Vettori e puntatori/Puntatori
** Interscambiabilità tra puntatori e vettoriC/Vettori e puntatori/Interscambiabilità tra puntatori e vettori
* StringheC/Variabili, operatori e costanti/Stringhe
* Enumerazioni, strutture e unioniC/Enumerazioni, strutture e unioni
** EnumerazioniC/Enumerazioni, strutture e unioni/Enumerazioni
** StruttureC/Enumerazioni, strutture e unioni/Strutture
** UnioniC/Enumerazioni, strutture e unioni/Unioni
* Conversioni di tipoC/Conversioni di tipo
* Lettura e scrittura su fileC/Lettura e scrittura su file
** File di TestoC/Lettura e scrittura su file/File di Testo
** File BinariC/Lettura e scrittura su file/File Binari
* Compilatore e precompilatoreC/Compilatore e precompilatore
** CompilatoreC/Compilatore e precompilatore/Compilatore
** DirettiveC/Compilatore e precompilatore/Direttive
** HeaderC/Compilatore e precompilatore/Header
* VisibilitàC/Visibilità
* Gestione della memoriaC/Gestione della memoria
* Le applicazioni CGIC/Le applicazioni CGI
* Appendice
** Librerie standardC/Appendice/Librerie standard
*** assert.hC/Appendice/Librerie standard/assert.h
*** ctype.hC/Appendice/Librerie standard/ctype.h
*** errno.hC/Appendice/Librerie standard/errno.h
*** float.hC/Appendice/Librerie standard/float.h
*** limits.hC/Appendice/Librerie standard/limits.h
*** locale.hC/Appendice/Librerie standard/locale.h
*** math.hC/Appendice/Librerie standard/math.h
*** setjmp.hC/Appendice/Librerie standard/setjmp.h
*** signal.hC/Appendice/Librerie standard/signal.h
*** stdarg.hC/Appendice/Librerie standard/stdarg.h
*** stddef.hC/Appendice/Librerie standard/stddef.h
*** stdio.hC/Appendice/Librerie standard/stdio.h
*** stdlib.hC/Appendice/Librerie standard/stdlib.h
*** string.hC/Appendice/Librerie standard/string.h
*** time.hC/Appendice/Librerie standard/time.h
** StrumentiC/Appendice/Strumenti
*** InstallerC/Appendice/Strumenti/Installer
** Librerie esterneC/Appendice/Librerie esterne
* Bibliografia
    IndiceC/Indice
Modifica il sommario
Il linguaggio C permette di scomporre il codice in sottoparti da poter riutilizzare in seguito. Questa funzionalità è resa disponibile dalle funzioni.

## Prototipi

Per poter fare uso di una funzione è necessario definirne il prototipo, ossia il nome, il tipo di valore restituito e il tipo degli argomenti. La sintassi di un prototipo è la seguente:
dove tipo_restituito è uno dei tipi base o di quelli definiti dal programmatore e lo stesso vale per l'elenco dei tipi degli argomenti. L'elenco dei tipi degli argomenti può essere sostituito dalla parola void per indicare che la funzione non ha argomenti oppure essere costituita da almeno un tipo e in ultima posizione ... ad indicare che seguono un numero variabile di argomenti, per chiarire:
Il prototipo della funzione va messo prima della funzione main, successivamente la funzione può essere chiamata in qualsiasi punto del file sorgente; la definizione vera e propria della funzione può essere posta ovunque nel sorgente al di fuori di altre funzioni e comunque dopo i prototipi, ma come pratica diffusa si mettono dopo la funzione main.

## Definizione di una funzione

Le funzioni in C si definiscono in questo modo:
Se il tipo di valore da restituire è void, indica che non viene restituito nessun valore.
In questo caso l'istruzione return è facoltativa. Può servire per un'uscita prematura, cioè per terminare la funzione prima di giungere alla fine.
Se la funzione è stata dichiarata per restituire void, essa non restituirà alcun valore: l'istruzione return delle funzioni che rendono un void non ammette parametri.
Lo standard afferma che una funzione che non accetta argomenti nella dichiarazione tra le parentesi tonde deve avere la parola void, poi per richiamare tale funzione se ne scrive il nome seguito da una coppia di parentesi tonde aperta e chiusa.
La definizione può fungere anche da prototipo se posta prima della funzione main e prima del prototipo di una funzione che ne fa uso. Esempio:
Il risultato sarà:
main è la funzione principale che viene chiamata all'avvio del programma.