C/Blocchi e funzioni/main

Indice del libro

La funzione main è la funzione che viene eseguita all'inizio del programma. Essa può avere degli argomenti e deve restituire un valore.

Nessun'altra funzione nel programma deve avere il nome main.

Restituzione di un valore modifica

Per convenzione si è soliti far ritornare alla funzione main il valore 0 se l'esecuzione si è svolta in modo corretto ed un valore diverso da zero per rappresentare un codice di errore in caso di esecuzione fallita. Lo standard (C99) prevede la possibilità di omettere il valore di ritorno: in tal caso verrà restituito 0 in maniera implicita.

Per esempio:

 #include <stdio.h>
 #include <stdlib.h>
 
 int main(void)
 {
     int a=rand();
     if (a>10)
         return 1; //Errore!
     return 0;
 }

Questo semplice programma restituirà 1 se il numero casuale a è maggiore di 10, 0 se è minore o uguale a 10. È possibile anche usare la funzione exit(int valore) per restituire un valore:

 #include <stdio.h>
 #include <stdlib.h>
 
 int main(void)
 {
     int a=rand();
     if (a>10)
         exit(1); //Errore!
     exit(0);
 }

Passaggio di parametri modifica

Lo standard definisce 2 dichiarazioni per la funzione main:

  1. int main (void)
    
  2. int main (int argc, char *argv[])
    

la prima è usata quando non interessa la riga di comando, la seconda altrimenti. Per quanto riguarda la seconda dichiarazione, il primo parametro indica il numero di argomenti passati al programma (incluso il nome del programma), il secondo contiene tutti gli argomenti sotto forma di stringhe (il nome del programma corrisponde ad argv[0]).

Talvolta viene anche incluso un terzo argomento (non previsto dallo standard) envp con la stessa sintassi di argv, questo array contiene le variabili di ambiente.

Comunque si possono usare altri nomi per i 2 argomenti di main().

Il passaggio di parametri ad un programma avviene tramite la sua invocazione da linea di comando. Infatti è sufficiente far seguire al nome del programma i valori da passare, separati da uno spazio. Gli argomenti vengono trattati come stringhe, in particolare, alla prima posizione del vettore argv sarà presente una stringa che contiene il nome del programma eseguito. Nel caso in cui sia necessario passare al programma parametri di altri tipi base sarà necessario effettuare una conversione.

 #include <stdio.h>
 #include <stdlib.h>
 
 int main(int argc, char *argv[])
 {
     int i;
     printf("A questo programma sono stati passati %d argomenti.\n", argc-1);
     for (i=1; i<argc; i++)
        printf("Il %d° parametro è %s.\n", i, argv[i]);
     system("pause");
     return 0;
 }

Se questo programma si chiama pippo, il comando pippo buongiorno ciao restituirà:

A questo programma sono stati passati 2 argomenti.
Il 1° parametro è buongiorno.
Il 2° parametro è ciao.