C – Le funzioni

C – Le funzioni

Definizione

Le funzioni, dette anche sottoprogrammi, sono aggregati di gruppi di istruzioni e si usano per evitare di ripetere porzioni di codice. Possiamo richiamare tante volte la funzione e quindi eseguire quel codice più volte avendo solo una porzione di quel codice.

Questo approccio è denominato programmazione modulare e lo sviluppatore dividerà in moduli i diversi task del proprio software. Si possono inoltre creare librerie da utilizzare in più programmi, e saranno analoghe a funzioni come lo strcmp e lo strcpy della libreria string.h.

Dichiarazione di una funzione

Per poter utilizzare una funzione dobbiamo dichiararla prima del main utilizzando il seguente prototyping

tipoRitorno nomeFunz (tipoPar1, …, tipoParN);

per esempio, una funzione che restituisce la somma tra due numeri interi si può definire nel seguente modo

int somma(int, int );

Il tipo restituito sarà un intero, il nome della funzione è somma e accetta come argomenti due valori interi .

Dopo il blocco main si deve definire la funzione somma

int somma(int a, int b){
    return a+b;
}

i valori a e b su cui agisce la funzione sono detti parametri formali.

Nel seguente programma invochiamo la funzione somma tre volte passando differenti valori interi

#include<stdio.h>
int somma(int, int );
int main(){
    int c=3,d=4;
    int res;
    res=somma(c,d);
    printf("La somma 1: %d\n",res);
    res=somma(5,c);
    printf("La somma 2: %d\n",res);
    res=somma(c,c);
    printf("La somma 2: %d\n",res);
    return 0;
}
int somma(int a, int b){
    return a+b;
}

Nota che ad ogni invocazione della funzione i parametri formali sono inizializzati con i valori corrispondenti dei parametri attuali nel primo caso c e d, nel secondo caso 5 e c e nel terzo caso c e c

Variabili globali

Quando si definisce una variabile globale cioè esterna sia al main che alle funzioni si può avere il passaggio implicito di parametri

#include<stdio.h>
char path[] = "documents/";
int strlength(void);
int main(){
    printf("La stringa ha %d caratteri \n",strlength());
    return 0;
}
int strlength(){
    int res;
    for(res=0;path[res]!='\0';res++);
    return res;
}

Nota l’utilizzo del ; dopo il for, questo è necessario affinché non venga inteso il return come blocco del ciclo.

Funzioni che non restituiscono alcun valore

Nel caso la nostra funzione non restituisca nessun valore, nel linguaggio C abbiamo a disposizione il tipo speciale void. Questo tipo di funzioni sono chiamate sink.

Creiamo una funzione che stampa i divisori di un numero intero, quindi non restituirà un valore ma stamperà una serie di valori.

#include<stdio.h>
void stampaDiv(int);
int main(){
    int num;
    do{
        printf("Inserisci un numero \n");
        scanf("%d",&num);   
    }while(num<=0);
    stampaDiv(num);
}
void stampaDiv(int n){
    int i;
    for(i=0;i<=n;i++){
        if(n%i==0){
            printf("%d \t",i);
        }
    }
}

C Coding standard

Lezione sulle strutture di controllo

La mia repository GitHub con il materiale delle lezioni sul C

Pubblicato da Carlo Contardi

Carlo Contardi, docente di informatica e sviluppatore Full Stack, condivide la sua passione per la programmazione e l’informatica attraverso il suo blog Space Coding. Offre preziosi consigli e soluzioni pratiche a chi vuole imparare a programmare o migliorare le proprie abilità. 🚀👨‍💻

Translate »