Didattica C: Passaggio parametri da linea di comando

Quando si opera in ambito shell solitamente si creano programmi capaci di accettare diversi parametri che serviranno per impostare o modificare diverse componenti del software stesso. Vediamo come scrivere del codice in C per abilitare e gestire argomenti passati al programma da linea di comando.

Iniziamo col vedere il codice utile a svolgere tale scopo:

int main(int argc, char* argv[])

Quello che si vede è il classico main presente, necessariamente, in ogni programma scritto in C. Chi ha dimestichezza con il linguaggio in questione noterà che tra le parentesi che normalmente si lasciano vuote sono presenti due nuove variabili, argc ed argv[].

int Argc è un intero che contiene il numero di parametri passati al programma mediante la riga di comando. Si noti che se i parametri passati sono n, argc varrà n+1 poichè esso conteggia anche il programma stesso.

char* Argv[] (o equivalentemente **argv) è un array di tipo puntatore a char (carattere) e contiene le stringhe equivalenti ai vari parametri. Ogni elemento del vettore infatti contiene il parametro salvato come stringa. Da notare che in argv[0] è salvato il nome del programma stesso.

Vediamo un esempio.

Prendiamo un semplice codice C che legge i dati passati da riga di comando r gli stampa nuovamente nel terminale.

int main(int argc, char* argv[])

{
int i;

//-- leggiamo ogni parametro presente in linea di comando
for ( i=0 ; i!=argc ; i++ ){
printf("%s\n", argv[i]);
}

return 0;

}

Il codice in questione è molto semplice. Esso, grazie ad un ciclo for, controlla di volta ogni parametro passato.

Compilando il programma e scrivendo nel terminale:

./programma cane gatto topo

Il terminale restituirà:

./programma
cane
gatto
topo

Infatti eseguendo il ciclo for si vede che per i=0 si ha argv[0] ovvero il nome del programma stesso, per i=1 si ha il primo parametro cioè cane per i=2 si ha il secondo parametro e così via.

Come si vede l’uso dei parametri è abbastanza facile e permette una versatilità del software abbastanza potente pur non avendo a disposizione una GUI con la quale impostare i valori.