UN funzione definita dall'utente è un tipo di funzione in linguaggio C definita dall'utente stesso per eseguire alcune attività specifiche. Fornisce riusabilità e modularità del codice al nostro programma. Le funzioni definite dall'utente sono diverse dalle funzioni integrate poiché il loro funzionamento è specificato dall'utente e non è richiesto alcun file di intestazione per il loro utilizzo.
In questo articolo impareremo a conoscere funzione definita dall'utente, prototipo di funzione, definizione di funzione, chiamata di funzione e diversi modi in cui possiamo passare parametri a una funzione.
Come utilizzare le funzioni definite dall'utente in C?
Per utilizzare una funzione definita dall'utente, dobbiamo prima comprendere le diverse parti della sua sintassi. La funzione definita dall'utente in C può essere divisa in tre parti:
- Prototipo di funzione
- Definizione della funzione
- Chiamata di funzione
Prototipo di funzione C
Un prototipo di funzione è noto anche come dichiarazione di funzione che specifica il file nome della funzione, parametri della funzione, E tipo di restituzione . Il prototipo della funzione non contiene il corpo della funzione. Viene fondamentalmente utilizzato per informare il compilatore dell'esistenza della funzione definita dall'utente che può essere utilizzata nella parte successiva del programma.
Sintassi
return_type function_name (type1 arg1 , type2 arg2 , ... typeN argN );>
Possiamo anche saltare il nome degli argomenti nel prototipo della funzione. COSÌ,
return_type function_name (type1 , type2 , ... typeN);>

Definizione della funzione C
Una volta chiamata la funzione, la definizione della funzione contiene le istruzioni effettive che verranno eseguite. Tutte le istruzioni della definizione della funzione sono racchiuse all'interno { } bretelle.
Sintassi
return_type function_name (type1 arg1 , type2 arg2 .... typeN argN ) { // actual statements to be executed // return value if any }>
Nota: Se la chiamata alla funzione è presente dopo la definizione della funzione, possiamo saltare la parte del prototipo della funzione e definire direttamente la funzione.
Chiamata funzione C
Per trasferire il controllo a una funzione definita dall'utente, dobbiamo chiamarla. Le funzioni vengono chiamate usando i loro nomi seguiti da parentesi tonde. I loro argomenti vengono passati tra parentesi.
delizia soleggiata
Sintassi
function_name(arg1, arg2, ... argN);>
Esempio di funzione definita dall'utente
Il seguente programma C illustra come utilizzare le funzioni definite dall'utente nel nostro programma.
C
// C Program to illustrate the use of user-defined function> #include> // Function prototype> int> sum(> int> ,> int> );> // Function definition> int> sum(> int> x,> int> y)> {> > int> sum;> > sum = x + y;> > return> x + y;> }> // Driver code> int> main()> {> > int> x = 10, y = 11;> > // Function call> > int> result = sum(x, y);> > printf> (> 'Sum of %d and %d = %d '> , x, y, result);> > return> 0;> }> |
>
>
altera aggiungi colonna OracleProduzione
Sum of 10 and 11 = 21>
Componenti della definizione di funzione
Ci sono tre componenti della definizione di funzione:
- Parametri di funzione
- Corpo funzionale
- Valore di ritorno
1. Parametri funzionali
I parametri della funzione (noti anche come argomenti) sono i valori che vengono passati alla funzione chiamata dal chiamante. Possiamo passare nessuno o qualsiasi numero di parametri di funzione alla funzione.
Dobbiamo definire il nome della funzione e il suo tipo nella definizione della funzione e possiamo passare solo lo stesso numero e tipo di parametri nella chiamata della funzione.
Esempio
int foo ( int a, int b) ;>
Qui, UN E B sono parametri di funzione.
Nota: Il linguaggio C fornisce un metodo mediante il quale possiamo passare un numero variabile di argomenti alla funzione. Tali funzioni sono chiamate funzioni variadiche.
2. Corpo funzionale
Il corpo della funzione è l'insieme di istruzioni racchiuse tra parentesi graffe { }. Sono le istruzioni che vengono eseguite quando viene chiamata la funzione.
Esempio
int foo (int a, int b) { int sum = a + b; return sum; }>
Qui, le dichiarazioni tra { E } è il corpo della funzione.
3. Valore restituito
Il valore restituito è il valore restituito dalla funzione al suo chiamante. Una funzione può restituire solo un singolo valore ed è facoltativa. Se non deve essere restituito alcun valore, il tipo restituito è definito come void.
IL restituire la parola chiave viene utilizzato per restituire il valore da una funzione.
Sintassi
return ( expression );>
Esempio
int foo (int a, int b) { return a + b; }>
Nota: Possiamo utilizzare puntatori o strutture per restituire più valori da una funzione in C .
Passaggio di parametri a funzioni definite dall'utente
Possiamo passare parametri a una funzione in C utilizzando due metodi:
- Chiama per valore
- Chiama per riferimento
1. Chiama per valore
Nella chiamata per valore, una copia del valore viene passata alla funzione e le modifiche apportate alla funzione non si riflettono sui valori. Gli argomenti effettivi e formali vengono creati in diverse posizioni di memoria.
Esempio
C
// C program to show use of> // call by value> #include> void> swap(> int> a,> int> b)> {> > int> temp = a;> > a = b;> > b = temp;> }> // Driver code> int> main()> {> > int> x = 10, y = 20;> > printf> (> 'Values of x and y before swap are: %d, %d
'> , x,> > y);> > swap(x, y);> > printf> (> 'Values of x and y after swap are: %d, %d'> , x,> > y);> > return> 0;> }> |
>
css per centrare un'immagine
>Produzione
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 10, 20>
Nota: I valori non vengono modificati nella chiamata per valore poiché non vengono passati per riferimento.
2. Chiamata per riferimento
In una chiamata tramite Reference, l'indirizzo dell'argomento viene passato alla funzione e le modifiche apportate alla funzione si riflettono sui valori. Noi usiamo il puntatori del tipo richiesto per ricevere l'indirizzo nella funzione.
Esempio
C
array.da Java
// C program to implement> // Call by Reference> #include> void> swap(> int> * a,> int> * b)> {> > int> temp = *a;> > *a = *b;> > *b = temp;> }> // Driver code> int> main()> {> > int> x = 10, y = 20;> > printf> (> 'Values of x and y before swap are: %d, %d
'> , x,> > y);> > swap(&x, &y);> > printf> (> 'Values of x and y after swap are: %d, %d'> , x,> > y);> > return> 0;> }> |
>
>Produzione
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 20, 10>
Per maggiori dettagli, fare riferimento a questo articolo - Differenza tra Call by Value e Call by Reference
Vantaggi delle funzioni definite dall'utente
I vantaggi derivanti dall'utilizzo delle funzioni nel programma sono i seguenti:
- Si può evitare la duplicazione del codice nei programmi utilizzando le funzioni. Il codice può essere scritto più rapidamente e di conseguenza essere più leggibile.
- Il codice può essere diviso e conquistato utilizzando le funzioni. Questo processo è noto come Dividi e conquista. È difficile scrivere grandi quantità di codice all'interno della funzione principale, così come eseguire test e debug. Il nostro unico compito può essere suddiviso in diverse sotto-attività più piccole utilizzando le funzioni, riducendo così la complessità complessiva.
- Ad esempio, quando si utilizza pow, sqrt, ecc. in C senza sapere come è implementato, è possibile nascondere i dettagli di implementazione con le funzioni.
- Con modifiche minime o nulle, le funzioni sviluppate in un programma possono essere utilizzate in un altro, riducendo i tempi di sviluppo.