Argomenti da linea di comando in C++

Il C++, come il C, permette di leggere argomenti dalla linea di comando, e questi possono poi essere utilizzati all'interno dei programmi. In fase di lancio del programma, potete scrivere gli argomenti dopo il nome del programma da eseguire.

Per passare degli argomenti al vostro programma dovete cambiare il vostro main() in modo che possa prendere dei parametri, come una qualsiasi altra funzione. Al fine di essere in grado di utilizzare tali argomenti, e' necessario definirli nel seguente modo:
int main(int argc, char **argv) { // codice }
oppure
int main(int argc, char *argv[]){ // codice }
Cosi' la funzione main ha ora i propri argomenti e sono definiti in questo modo:
  argc: è il numero degli argomenti digitati, incluso il nome del programma.
**argv: è un array di stringhe contenente ciascun argomento, compreso il nome del programma come primo elemento.

Vi faccio un esempio di un semplice programma che stampa gli argomenti passati da linea di comando:
using namespace std;
#include <iostream>
#include <cstdlib> 

int main(int argc, char **argv) {
  if(argc == 1) {
    cout << "Usate: " << argv[0] << " <opzioni>\n";
    exit(0); // termina il programma
  }

  cout << "Gli argomenti sono: \n";

  // parto da i=1 visto che i=0 è il programma stesso
  for(int i = 1; i < argc; i++) {
    cout << "argv[" << i << "]: " << argv[i] << endl;
  }
  cout << endl;

  return 0;
}
Con Linux compilate il vostro programma nel solito modo:
- aprite la console
- digitate: g++ il_vostro_file.cc

In alternativa potete cambiare il nome del programma da "a.out" a qualsiasi cosa con:
g++ il_vostro_file.cc -o nuovo_nome

Se tutto è andato a buon fine, lanciando il vostro programma l'output dovrebbe essere questo:
$ ./a.out -a -b -c
Gli argomenti sono: 
argv[1]: -a
argv[2]: -b
argv[3]: -c
dove ./a.out è il comando per lanciare il programma con nome "a.out" e -a, -b e -c sono i vostri parametri.

La ricetta è semplice, in seguito vi mostrerò come gestire meglio le opzioni per il vostro programma!
Spero vi sia stato utile, alla prossima!

Commenti