Funzioni nella programmazione C con esempi: ricorsivo, inline

Sommario:

Anonim

Cos'è una funzione in C?

La funzione nella programmazione C è un blocco di codice riutilizzabile che rende un programma più facile da capire, testare e può essere facilmente modificato senza cambiare il programma chiamante. Le funzioni dividono il codice e modularizzano il programma per risultati migliori ed efficaci. In breve, un programma più grande è suddiviso in vari sottoprogrammi che vengono chiamati come funzioni

Quando si divide un programma di grandi dimensioni in varie funzioni, diventa facile gestire singolarmente ciascuna funzione. Ogni volta che si verifica un errore nel programma, è possibile esaminare facilmente le funzioni difettose e correggere solo quegli errori. Puoi facilmente chiamare e utilizzare le funzioni ogni volta che sono richieste, il che porta automaticamente a risparmiare tempo e spazio.

In questo tutorial imparerai-

  • Biblioteca vs. Funzioni definite dall'utente
  • Dichiarazione di funzione
  • Definizione di funzione
  • Chiamata di funzione
  • Argomenti della funzione
  • Ambito variabile
  • Variabili statiche
  • Funzioni ricorsive
  • Funzioni in linea

Biblioteca vs. Funzioni definite dall'utente

Ogni programma 'C' ha almeno una funzione che è la funzione principale, ma un programma può avere un numero qualsiasi di funzioni. La funzione main () in C è un punto di partenza di un programma.

Nella programmazione 'C' le funzioni sono suddivise in due tipologie:

  1. Funzioni di libreria
  2. Funzioni definite dall'utente

La differenza tra la libreria e le funzioni definite dall'utente in C è che non è necessario scrivere un codice per una funzione di libreria. È già presente all'interno del file di intestazione che includiamo sempre all'inizio di un programma. Devi solo digitare il nome di una funzione e usarlo insieme alla sintassi corretta. Printf, scanf sono gli esempi di una funzione di libreria.

Considerando che, una funzione definita dall'utente è un tipo di funzione in cui dobbiamo scrivere il corpo di una funzione e chiamare la funzione ogni volta che richiediamo alla funzione di eseguire qualche operazione nel nostro programma.

Una funzione definita dall'utente in C viene sempre scritta dall'utente, ma in seguito può far parte della libreria "C". È uno dei principali vantaggi della programmazione "C".

Le funzioni di programmazione C sono suddivise in tre attività come,

  1. Dichiarazione di funzione
  2. Definizione di funzione
  3. Chiamata di funzione

Dichiarazione di funzione

La dichiarazione di funzione significa scrivere un nome di un programma. È una parte obbligatoria per l'utilizzo delle funzioni nel codice. In una dichiarazione di funzione, specifichiamo semplicemente il nome di una funzione che useremo nel nostro programma come una dichiarazione di variabile. Non possiamo usare una funzione a meno che non sia dichiarata in un programma. Una dichiarazione di funzione è anche chiamata " prototipo di funzione ".

Le dichiarazioni di funzione (chiamate prototipo) vengono solitamente eseguite sopra la funzione main () e assumono la forma generale:

return_data_type function_name (data_type arguments);
  • Il return_data_type : è il tipo di dati della funzione valore restituito di nuovo alla dichiarazione che chiede.
  • Il nome_funzione : è seguito da parentesi
  • I nomi degli argomenti con le loro dichiarazioni del tipo di dati facoltativamente vengono inseriti tra parentesi.

Consideriamo il seguente programma che mostra come dichiarare una funzione cubo per calcolare il valore del cubo di una variabile intera

#include /*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {

Tieni presente che una funzione non restituisce necessariamente un valore. In questo caso, viene utilizzata la parola chiave void.

Ad esempio, la dichiarazione della funzione output_message indica che la funzione non restituisce un valore: void output_message ();

Definizione di funzione

Definizione di funzione significa semplicemente scrivere il corpo di una funzione. Un corpo di una funzione è costituito da istruzioni che eseguiranno un compito specifico. Un corpo di funzione è costituito da un singolo o da un blocco di istruzioni. È anche una parte obbligatoria di una funzione.

int add(int a,int b) //function body{int c;c=a+b;return c;}

Chiamata di funzione

Una chiamata di funzione significa chiamare una funzione ogni volta che è richiesta in un programma. Ogni volta che chiamiamo una funzione, esegue un'operazione per la quale è stata progettata. Una chiamata di funzione è una parte opzionale di un programma.

 result = add(4,5);

Ecco il codice completo:

#include int add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}

Produzione:

Addition:30

Argomenti della funzione

Gli argomenti di una funzione vengono utilizzati per ricevere i valori necessari dalla chiamata alla funzione. Sono abbinati in base alla posizione; il primo argomento viene passato al primo parametro, il secondo al secondo parametro e così via.

Per impostazione predefinita, gli argomenti vengono passati per valore in cui viene fornita una copia dei dati alla funzione chiamata. La variabile effettivamente passata non cambierà.

Consideriamo il seguente programma che mostra i parametri passati per valore:

int add (int x, int y);int main() {int a, b, result;a = 5;b = 10;result = add(a, b);printf("%d + %d\ = %d\n", a, b, result);return 0;}int add (int x, int y) {x += y;return(x);}

L'output del programma è:

5 + 10 = 15 

Tieni presente che i valori di aeb sono stati passati alla funzione di aggiunta non sono stati modificati perché solo il suo valore è stato passato nel parametro x.

Ambito variabile

Per ambito variabile si intende la visibilità delle variabili all'interno di un codice del programma.

In C, le variabili dichiarate all'interno di una funzione sono locali a quel blocco di codice e non possono essere riferite al di fuori della funzione. Tuttavia, le variabili dichiarate al di fuori di tutte le funzioni sono globali e accessibili dall'intero programma. Le costanti dichiarate con un #define all'inizio di un programma sono accessibili dall'intero programma. Consideriamo il seguente programma che stampa il valore della variabile globale sia dalla funzione principale che da quella definita dall'utente:

#include int global = 1348;void test();int main() {printf("from the main function : global =%d \n", global);test () ;return 0;}void test (){printf("from user defined function : global =%d \n", global);}

Risultato:

from the main function : global =1348from user defined function : global =1348

Discutiamo i dettagli del programma:

  1. Dichiariamo una variabile globale intera con 1348 come valore iniziale.
  2. Dichiariamo e definiamo una funzione test () che non accetta argomenti né restituisce un valore. Questa funzione stampa solo il valore della variabile globale per dimostrare che è possibile accedere alle variabili globali ovunque nel programma.
  3. Stampiamo la variabile globale all'interno della funzione principale.
  4. Chiamiamo la funzione test in orde per stampare il valore della variabile globale.

In C, quando gli argomenti vengono passati ai parametri della funzione, i parametri agiscono come variabili locali che verranno distrutte quando si esce dalla funzione.

Quando si utilizzano variabili globali, utilizzarle con cautela perché possono causare errori e possono cambiare ovunque in un programma. Dovrebbero essere inizializzati prima dell'uso.

Variabili statiche

Le variabili statiche hanno un ambito locale. Tuttavia, non vengono distrutti quando si esce dalla funzione. Pertanto, una variabile statica mantiene il suo valore per sempre ed è possibile accedervi quando la funzione viene reinserita. Una variabile statica viene inizializzata quando dichiarata e necessita del prefisso static.

Il seguente programma utilizza una variabile statica:

#include void say_hi();int main() {int i;for (i = 0; i < 5; i++) { say_hi();}return 0;}void say_hi() {static int calls_number = 1;printf("Hi number %d\n", calls_number);calls_number ++; } 

Il programma visualizza:

Hi number 1Hi number 2Hi number 3Hi number 4Hi number 5

Funzioni ricorsive

Considera il fattoriale di un numero che viene calcolato come segue 6! = 6 * 5 * 4 * 3 * 2 * 1.

Questo calcolo viene eseguito ripetutamente calcolando il fatto * (fatto -1) finché il fatto non è uguale a 1.

Una funzione ricorsiva è una funzione che chiama se stessa e include una condizione di uscita per terminare le chiamate ricorsive. Nel caso del calcolo del numero fattoriale, la condizione di uscita è di fatto uguale a 1. La ricorsione funziona "impilando" le chiamate fino a quando la condizione di uscita è vera.

Per esempio:

#include int factorial(int number);int main() {int x = 6;printf("The factorial of %d is %d\n", x, factorial(x));return 0;}int factorial(int number) {if (number == 1) return (1); /* exiting condition */elsereturn (number * factorial(number - 1));} 

Il programma visualizza:

 The factorial of 6 is 720 

Qui discutiamo i dettagli del programma:

  1. Dichiariamo la nostra funzione fattoriale ricorsiva che prende un parametro intero e restituisce il fattoriale di questo parametro. Questa funzione chiamerà se stessa e decrementerà il numero fino al raggiungimento della condizione exiting o base. Quando la condizione è vera, i valori generati in precedenza verranno moltiplicati l'uno per l'altro e verrà restituito il valore fattoriale finale.
  2. Dichiariamo e inizializziamo una variabile intera con valore "6" e quindi stampiamo il suo valore fattoriale chiamando la nostra funzione fattoriale.

Considera la seguente tabella per comprendere meglio il meccanismo ricorsivo che consiste nel chiamare la funzione se stessa fino a quando non viene raggiunto il caso base o la condizione di arresto, dopodiché raccogliamo i valori precedenti:

Funzioni in linea

La funzione nella programmazione C viene utilizzata per memorizzare le istruzioni utilizzate più di frequente. Viene utilizzato per modulare il programma.

Ogni volta che viene chiamata una funzione, il puntatore dell'istruzione salta alla definizione della funzione. Dopo aver eseguito una funzione, il puntatore dell'istruzione torna all'istruzione da cui è passato alla definizione della funzione.

Ogni volta che usiamo le funzioni, abbiamo bisogno di un'estremità del puntatore extra per saltare alla definizione della funzione e tornare all'istruzione. Per eliminare la necessità di tali teste di puntatore, utilizziamo le funzioni inline.

In una funzione inline, una chiamata di funzione viene sostituita direttamente da un codice di programma effettivo. Non salta a nessun blocco perché tutte le operazioni vengono eseguite all'interno della funzione inline.

Le funzioni inline vengono utilizzate principalmente per piccoli calcoli. Non sono adatti quando è coinvolto un computer di grandi dimensioni.

Una funzione inline è simile alla funzione normale tranne per il fatto che la parola chiave inline è posta prima del nome della funzione. Le funzioni inline vengono create con la seguente sintassi:

inline function_name (){//function definition}

Scriviamo un programma per implementare una funzione inline.

inline int add(int a, int b) //inline function declaration{return(a+b);}int main(){int c=add(10,20);printf("Addition:%d\n",c);getch();}

Produzione:

Addition: 30

Il programma sopra mostra l'uso di una funzione inline per l'aggiunta di due numeri. Come possiamo vedere, abbiamo restituito l'addizione su due numeri solo all'interno della funzione inline senza scrivere alcuna riga aggiuntiva. Durante la chiamata di funzione abbiamo appena passato valori su cui dobbiamo eseguire l'addizione.

Sommario

  • Una funzione è un mini-programma o un sottoprogramma.
  • Le funzioni vengono utilizzate per modulare il programma.
  • Libreria e definita dall'utente sono due tipi di funzioni.
  • Una funzione è costituita da una dichiarazione, un corpo di funzione e una parte di chiamata di funzione.
  • La dichiarazione di funzione e il corpo sono obbligatori.
  • Una chiamata di funzione può essere facoltativa in un programma.
  • Il programma C ha almeno una funzione; è la funzione principale ().
  • Ogni funzione ha un nome, un tipo di dati del valore restituito o un void, parametri.
  • Ogni funzione deve essere definita e dichiarata nel programma C.
  • Tieni presente che le variabili ordinarie in una funzione C vengono distrutte non appena usciamo dalla chiamata alla funzione.
  • Gli argomenti passati a una funzione non verranno modificati perché non sono passati per valore nessuno per indirizzo.
  • L'ambito delle variabili viene definito visibilità delle variabili all'interno di un programma
  • Ci sono variabili globali e locali nella programmazione C.