Utilizziamo cookie tecnici e di profilazione (anche di terze parti) per migliorare la tua esperienza su questo sito. Continuando la navigazione accetti l'utilizzo dei cookie; in alternativa, leggi l'informativa e scopri come disabilitarli.

La funzione main() puo' venire definita con nessuno, due oppure tre argomenti.
Esempio:

  int main(void)
    {...}

  int main(int argc, char *argv[])
    {...}

  int main(int argc, char *argv[], char *envp[])
    {...}
    

Tradizionalmente gli argomenti della funzione main() vengono battezzati argcargv e envp da tutta la letteratura informatica e dalla comunita' di programmatori.

In particolare argc, dichiarato come int, e argv, dichiarato come array di puntatori a char servono per passare al programma i paramentri inseriti nella linea di comando (command tail) al momento in cui si richiede al sistema operativo di mandare in esecuzione il programma stesso.
Infine envp dichiarato come array di puntatori a char, se presente, e' impiegato per trasmettere al programma copia dell'ambiente (cioe' tramite envp vengono passate le variabili di ambiente al programma).

Nel dettaglio:

o argc contiene il numero dei paramentri sulla riga di comando, incluso il nome del programma. Pertanto argc e' sempre >= 1.
o argv e' un array di puntatori a char. Ogni puntatore referenzia un singolo parametro della linea di comando sotto forma sempre di stringa.
In altri termini, i parametri inseriti nella linea di comando vengono sempre acquisiti dal programma come stringhe, anche nel caso che questi rappresentino dei valori numerici.
Il significato dell'array di puntatori e' il seguente:
o argv[0] e' il nome del programma ed e' sempre presente.
o argv[1] e' il primo parametro (se esistente) digitato dopo il nome del programma.
o argv[argc-1] e' l'ultimo parametro passato al programma.
o argv[argc] e' uguale a '\0' (puntatore nullo).
o envp e' un array di puntatori a char. Ogni puntatore referenzia una singola variabile di ambiente, definita come stringa ed avente la forma:
variabile=valore
A differenza di argv, per envp non e' dato di conoscere a priori il numero di puntatori presenti nell'array.
Analogamente ad argv, anche per envp l'ultimo puntatore valido e' seguito da un puntatore nullo; pertanto il termine dell'array e' testabile con la condizione:
envp[i] == '\0'
In alternativa all'uso di envp per la rilevazione delle variabili di ambiente, e' preferibile fare impiego della funzione getenv() della libreria standard.

 

 Ad esempio:

	/* programma per stampare gli argomenti dalla linea di comando */
#include <stdio.h> main(int argc, char **argv) { int i; printf("argc=%d\n",argc); for(i=0;i < argc;++i) printf("argv[%d]:=%s\n",i,argv[i]); } Se si compila chiamandolo "eco" e lo si edegue scrivendo: eco f1 "f2 con spazio" f3 4 stop! l'output sara': argc=6 argv[0]=eco argv[1]=f1 argv[2]=f2 con spazio argv[3]=f3 argv[4]=4 argv[5]=stop! Va notato che:
  • argv[0] e' il nome del programma;
  • argc totalizza anche il nome del programma;
  • tra gli argomenti, i caratteri "" vengono ignorati (sono considerati solamente delimitatori di argomenti);
  • gli spazi bianchi delimitano gli argomenti;
  • nel caso in cui sia necessario mantenere spazi bianchi, occorre metterli tra "".