Ogni programma C è una raccolta di funzioni. Scopri tutto su questi utili pezzi di codice riutilizzabili, da come definirli a cosa significa void.
Potresti aver trattato la sintassi C di base, con semplici esempi, e ora ti stai chiedendo come creare programmi più grandi e reali. Per cominciare, ti consigliamo di organizzare il tuo codice in parti efficienti, con un minimo di ripetizioni. In C, come nella maggior parte dei linguaggi, la risposta ai tuoi problemi è la funzione.
Creare e utilizzare funzioni in C è semplice e offre molti vantaggi. Le funzioni consentono di suddividere programmi complessi in parti più piccole. Forniscono la riusabilità, sia all'interno del programma originale, sia nelle librerie correlate o in altri programmi separati.
Per iniziare, dovrai conoscere le dichiarazioni di funzioni, i prototipi, i parametri e le istruzioni return.
Cosa sono le funzioni in C?
Nella programmazione C, una funzione è una sezione di codice con nome che fa qualcosa quando glielo chiedi. Aiuta a mantenere il codice organizzato e ti consente di utilizzare la stessa azione più volte senza ripeterti.
L’esempio più semplice è quello che hai già utilizzato: la funzione main(). La funzione main è particolarmente speciale perché funge da punto di ingresso principale per qualsiasi programma C. Puoi anche utilizzare le funzioni di libreria, che sono quelle che qualcun altro ha già scritto, oppure puoi scrivere le tue funzioni definite dall'utente.
Funzioni: dichiarazione, definizione e chiamata
Questi tre aspetti sono fondamentali per l'utilizzo delle funzioni.
Dichiarazione di funzione
Fornisce informazioni sul nome, sul tipo restituito e sui parametri di una funzione, consentendone l'utilizzo prima della sua definizione completa. Viene anche chiamato prototipo di funzione. Segue questa semplice sintassi:
return_type function_name(parameters);
Dove:
- tipo_ritorno è il tipo di dati del valore restituito dalla funzione. Può essere qualsiasi tipo di dati C valido o vuoto se la funzione non restituisce un valore.
- nome_funzione è il nome che dai alla funzione. Lo utilizzerai per chiamare la funzione in seguito.
- parametri è un elenco di parametri di input accettati dalla funzione, se presenti. Ogni parametro è costituito da un tipo di dati seguito da un nome di parametro separato da virgole.
Ad esempio, ecco una semplice dichiarazione di funzione:
intadd(int a, int b);
Definizione della funzione
Quando chiami una funzione, esegue il codice specificato nella sua definizione. Include il nome della funzione, il tipo restituito, l'elenco dei parametri e le istruzioni che ne definiscono il comportamento. Ecco la sintassi:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Analizziamo parti della sintassi:
Corpo della funzione: Questo è il blocco di codice racchiuso tra parentesi graffe {}. Contiene le istruzioni che definiscono cosa fa la funzione quando viene chiamata.
Dichiarazione di restituzione: se la funzione ha un tipo restituito diverso da vuoto, IL ritorno L'istruzione restituisce un valore al chiamante. Questo valore deve corrispondere al tipo restituito specificato.
Ecco un semplice esempio di definizione di funzione:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Chiamata di funzione
Proprio come in cucina, potresti avere una ricetta (definizione della funzione) e alcuni ingredienti (argomenti), ma devi comunque seguire le istruzioni per ottenere un risultato. Una chiamata di funzione eseguirà la funzione con determinati argomenti; ecco la sintassi:
return_type result = function_name(arguments);
argomenti: questi sono i valori o le espressioni che passi alla funzione come input. Separa ogni argomento con una virgola. Il numero, l'ordine e i tipi di dati degli argomenti devono corrispondere all'elenco dei parametri della funzione.
risultato: se la funzione ha un tipo restituito diverso da vuoto, è possibile acquisire il valore restituito utilizzando una variabile del tipo di dati appropriato.
Ecco un esempio di chiamata di funzione:
#include
// Function prototype
intadd(int a, int b);intmain(){
int x = 5, y = 3;// Call the function and store the result in 'sum'
int sum = add(x, y);
printf("The sum of %d and %d is %d\n", x, y, sum);
return0;
}
// Function definition
intadd(int a, int b){
return a + b;
}
Seguendo questi tre passaggi: dichiarando la funzione, fornendo la sua implementazione e chiamandola con argomenti appropriati: puoi utilizzare in modo efficace le funzioni per eseguire varie attività nel tuo file programma.
Parametri di funzione e valori restituiti
I parametri sono variabili dichiarate nella dichiarazione o definizione della funzione che fungono da segnaposto per i valori passati alla funzione quando viene chiamata. Consentono di passare i dati alla funzione, consentendole di lavorare e manipolare tali dati. I valori restituiti sono i valori che una funzione produce e invia al chiamante.
Esistono due metodi per passare i parametri.
Passare per valore
Con questo approccio, una chiamata di funzione copia il valore dell'argomento effettivo nel parametro della funzione. Le modifiche apportate al parametro all'interno della funzione non influiscono sull'argomento originale.
Per esempio:
#include
intsquare(int num){
num = num * num;
return num;
}intmain(){
int x = 5;
int y = square(x);// Output: x and y after function call: 5 25
printf("x and y after function call: %d %d\n", x, y);
return0;
}
- La funzione quadrata accetta un parametro intero, numero.
- La funzione quadrato calcola il quadrato di num, ne aggiorna il valore e restituisce questo nuovo valore.
- La funzione main dichiara una variabile intera, Xe gli assegna il valore 5.
- Quindi chiama la funzione quadrata, passandole il valore di x. Assegna il risultato a una seconda variabile, sì.
- Dopo la chiamata alla funzione, main stampa i valori di x e y. Il valore x rimane lo stesso perché la modifica del parametro num all'interno del quadrato non influisce sulla x originale.
Passa per riferimento
Utilizzando questo approccio, si passa l'indirizzo di memoria (puntatore) di un valore a una funzione. Le modifiche apportate al parametro all'interno della funzione influiscono sul valore originale all'esterno di essa.
I puntatori, compreso il loro utilizzo come parametri, sono uno degli aspetti di C che lo rendono diverso da un linguaggio come Python.
#include
voidsquare(int *num){
*num = *num * *num;
}intmain(){
int x = 5;
square(&x);
// Output: x after function call: 25
printf("x after function call: %d\n", x);
return0;
}
- IL piazza la funzione accetta un puntatore intero (intero *) parametro, numero. Non restituisce un valore.
- La funzione quadrato calcola il quadrato del valore che numero contiene e aggiorna quel valore utilizzando l'operatore di dereferenza del puntatore, *.
- IL principale la funzione dichiara una variabile intera, Xe gli assegna il valore 5.
- Quindi chiama il piazza funzione con un puntatore a X utilizzando l'indirizzo dell'operatore: &X.
- Dopo la chiamata alla funzione, main stampa il valore di X, che è adesso 25 dalle modifiche a *num dentro il piazza la funzione influisce sull'originale X.
In sintesi, la differenza fondamentale tra i due metodi è il modo in cui le modifiche al parametro all'interno della funzione influiscono sul valore originale all'esterno di essa. Passa per valore crea una copia, mentre passa per riferimento (puntatore) consente la manipolazione diretta del valore originale.
Altri linguaggi hanno spesso un equivalente dei puntatori del C, ma generalmente funzionano a un livello più alto. Un esempio è Supporto di C# per le variabili out.
Funzioni del vuoto
Le funzioni void nella programmazione C sono funzioni che non restituiscono un valore. Usali per eseguire azioni o attività senza produrre risultati. Possono modificare i propri parametri utilizzando il passaggio per riferimento, ma non sono obbligati a farlo.
Ecco un esempio di funzione void:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Le funzioni void sono utili per eseguire azioni, stampare messaggi, modificare dati o eseguire attività senza richiedere un valore restituito.
Esplora le funzioni nella programmazione C
Esercitarsi attraverso la creazione di funzioni migliora la tua comprensione e l'applicazione nella programmazione C. Inoltre, aumenta la leggibilità del codice e la facilità di manutenzione. Tuffati nelle varie applicazioni delle funzioni per scoprirne i vantaggi.
Quando hai padroneggiato i fondamenti delle funzioni C e vuoi metterti alla prova, considera di approfondire la ricorsione.