Argomenti della riga di comando

È possibile passare alcuni valori dalla riga di comando ai programmi Objective-C quando vengono eseguiti. Questi valori vengono chiamaticommand line arguments e molte volte sono importanti per il tuo programma, specialmente quando vuoi controllare il tuo programma dall'esterno invece di codificare quei valori all'interno del codice.

Gli argomenti della riga di comando vengono gestiti utilizzando gli argomenti della funzione main () dove argc si riferisce al numero di argomenti passati e argv[]è un array di puntatori, che punta a ogni argomento passato al programma. Di seguito è riportato un semplice esempio, che controlla se ci sono argomenti forniti dalla riga di comando e agisce di conseguenza -

#import <Foundation/Foundation.h>

int main( int argc, char *argv[] ) {
   if( argc == 2 ) {
      NSLog(@"The argument supplied is %s\n", argv[1]);
   } else if( argc > 2 ) {
      NSLog(@"Too many arguments supplied.\n");
   } else {
      NSLog(@"One argument expected.\n");
   }
}

Quando il codice precedente viene compilato ed eseguito con un singolo argomento, ad esempio "testing", produce il risultato seguente.

2013-09-13 03:01:17.333 demo[7640] The argument supplied is testing

Quando il codice precedente viene compilato ed eseguito con due argomenti, diciamo testing1 e testing2, produce il risultato seguente.

2013-09-13 03:01:18.333 demo[7640] Too many arguments supplied.

Quando il codice precedente viene compilato ed eseguito senza passare alcun argomento, produce il risultato seguente.

2013-09-13 03:01:18.333 demo[7640] One argument expected

Si dovrebbe notare che argv[0] detiene il nome del programma stesso e argv[1]è un puntatore al primo argomento della riga di comando fornito e * argv [n] è l'ultimo argomento. Se non vengono forniti argomenti, argc sarà uno, altrimenti se si passa un argomento, alloraargc è impostato a 2.

Si passano tutti gli argomenti della riga di comando separati da uno spazio, ma se l'argomento stesso ha uno spazio, è possibile passare tali argomenti inserendoli tra virgolette doppie "" o virgolette singole "". Riscriviamo ancora una volta l'esempio precedente in cui stamperemo il nome del programma e passeremo anche un argomento della riga di comando inserendo tra virgolette doppie -

#import <Foundation/Foundation.h>

int main( int argc, char *argv[] ) {
   NSLog(@"Program name %s\n", argv[0]);
 
   if( argc == 2 ) {
      NSLog(@"The argument supplied is %s\n", argv[1]);
   } else if( argc > 2 ) {
      NSLog(@"Too many arguments supplied.\n");
   } else {
      NSLog(@"One argument expected.\n");
   }
   
   return 0;
}

Quando il codice precedente viene compilato ed eseguito con un singolo argomento separato da spazio ma tra virgolette doppie dice "Testing1 Testing2", produce il seguente risultato.

2017-11-30 06:36:59.081 main[71010] Program name main
2017-11-30 06:36:59.082 main[71010] One argument expected.