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 argc, argv 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:
argc contiene il numero dei paramentri sulla riga di comando, incluso il nome del programma. Pertanto argc e' sempre >= 1. | |||||||||
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:
|
|||||||||
envp e' un array di puntatori a char. Ogni puntatore referenzia una singola variabile di ambiente, definita come stringa ed avente la forma:variabile=valoreA 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 "".