Return 0

di il
12 risposte

Return 0

A cosa serve il return 0 all'interno della funzione main?

12 Risposte

  • Re: Return 0

    A restituire il valore 0 al chiamante
  • Re: Return 0

    #include<stdio.h>

    int somma_divisori(int);


    int main(){
    int n;
    scanf("%d", &n);
    printf("%d", somma_divisori(n));


    return 0;
    }


    int somma_divisori(int n){
    int i=1, s=0;

    while(i<n){
    if(n%i==0){
    s=s+i;
    }
    i=i+1;
    }

    return s;
    }


    in questo programma che restituisce la somma dei divisori a cosa serve? funziona con e senza il return 0...
  • Re: Return 0

    Il valore, che sia 0 o altro, viene restituito al chiamante, in questo caso s al main e 0 al sistema operativo.
  • Re: Return 0

    Come puo' essere altro se return 0 ritorna 0? e perche' comunque funziona anche senza di esso?

    scusami ma sono mooolto ignorante...
  • Re: Return 0

    Con "altro" intendevo altro valore, puoi restituire anche 2 con return 2.

    Il valore restituito deve essere utilizzato dal programma chiamante, se questo non lo fa, non importa.
  • Re: Return 0

    Quindi il return 0 nel main e' inutile perche' nessuna funzione chiama il main e comunque quello 0 non serve a nulla...
  • Re: Return 0

    Devi leggere quello che ti si scrive ... ti ho detto che, quando esegui il programma, il main è chiamato dal sistema operativo e il sistema operativo può utilizzare il valore restituito (ad esempio all'interno di un file batch). Se non lo fa non importa.
  • Re: Return 0

    Oltre a ciò che ti ha detto oregon, aggiungo che return 0 spesso sta a significare che il programma è terminato con successo. se utilizzi visual studio per fare il debugging o una delle ultime versioni di dev ti dice "program returned value x", dove x può essere 0 se è terminato con successo o un altro valore se ci sono stati problemi.
  • Re: Return 0

    E' una convenzione che può essere del tutto disattesa. Quello che viene restituito deve essere incluso un insieme di valori su cui chiamante e chiamato sono d'accordo.
  • Re: Return 0

    Anche se i due recenti standard C99 e C11 hanno scioccamente pasticciato sull'argomento, il main() di un programma C well-formed su un calcolatore mainstream deve restituire un valore al chiamante, che in questo caso è il SO o parte di esso (per un programma CLI, si tratta in genere di una shell o interprete dei comandi).

    Tale valore deve essere di tipo int, sui comuni PC windows, linux, *BSD o Mac che siano.

    Lo header stdlib.h prevede a tale proposito due costanti manifeste, EXIT_SUCCESS e EXIT_ERROR, che dovrebbero sempre essere utilizzate.

    Tale valore non ha alcuna influenza sullo svolgimento del programma in sè, ma può essere opzionalmente usato per comunicare con un processo "padre" a livello di shell (tipicamente uno script di shell o file batch, ma anche un altro eseguibile), in particolare per verificare il successo di una determinata operazione o la presenza di errori. La maggior parte dei programmi di sistema, sia DOS/Windows che *nix, usa tale convenzione per permettere un più ampio livello di automazione del sistema.

    In ogni caso, il programma deve sempre terminare restituendo un valore intero al sistema, perché lo sancisce lo standard del linguaggio.
  • Re: Return 0

    Se posso permettermi,vorrei aggiungere che 0 (zero) indica che il programma è terminato senza problemi. Ma questo non è sempre vero perchè ogni sistema operativo ha i suoi standard: ad esempio VAX/VMS interpreta 1 come terminazione senza errori e gli altri valori come codici di errori o stati particolari. Dunque come già sottolineato dal grande @MAW,è bene usare le costanti definiti dallo standard C che si fa carico di tradurre EXIT_SUCCESS e le altre costanti nell'intero corretto corrispondente per il SO su cui viene eseguito il nostro programma. Giusto per intenderci,su Linux EXIT_SUCCESS varrebbe 0,su VMS 1. Usare queste costanti non può fare altro che bene al nostro programma in termini di portabilità,dove possibile.
  • Re: Return 0

    loopunrolling ha scritto:


    Dunque come già sottolineato dal grande @MAW,è bene usare le costanti definiti dallo standard C che si fa carico di tradurre EXIT_SUCCESS e le altre costanti nell'intero corretto corrispondente per il SO su cui viene eseguito il nostro programma.
    Ringrazio loopunrolling per la valida aggiunta, alla quale si può aggregare un ulteriore classico esempio. Nei sistemi DOS tradizionali il valore di ritorno assume obbligatoriamente le dimensioni e il range di un intero non segnato a 8 bit, perché la chiamata alla corrispondente funzione DOS 4Ch di INT 21h si attende che il solo semiregistro AL contenga tale valore, in maniera coerente con la gestione della variabile d'ambiente ERRORLEVEL e relativi valori di test (che come noto devono appartenere all'intervallo intero [0, 255]) entro le istruzioni IF dei file batch. Passare erroneamente valori di dimensioni maggiori e/o segnati (ad esempio usando spensieratamente una enum definita in qualche libreria in un port da Win32 CLI verso un PC industriale con ROMDOS o PTS-DOS) può causare gravi malfunzionamenti a livello di interoperabilità tra eseguibili, come pure tra eseguibile e sistema.

    Quindi, a maggior ragione, vale il consiglio di rispettare lo standard e di usare sempre le costanti manifeste previste dal compilatore: anche in un banale esercizio didattico. Non è mai troppo presto per imparare a programmare in modo corretto.
Devi accedere o registrarti per scrivere nel forum
12 risposte