{"id":219,"date":"2009-10-02T12:38:00","date_gmt":"2009-10-02T12:38:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=219"},"modified":"2009-10-02T12:38:00","modified_gmt":"2009-10-02T12:38:00","slug":"didattica-c-passaggio-parametri-da-linea-di-comando","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/didattica-c-passaggio-parametri-da-linea-di-comando\/","title":{"rendered":"Didattica C: Passaggio parametri da linea di comando"},"content":{"rendered":"<div><span>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.<\/span><\/p>\n<p><span>Iniziamo col vedere il codice utile a svolgere tale scopo:<\/span><\/p>\n<pre><span>int main(int argc, char* argv[])<\/span><\/pre>\n<p><span>Quello che si vede \u00e8 il classico main presente, necessariamente, in ogni programma scritto in C. Chi ha dimestichezza con il linguaggio in questione noter\u00e0 che tra le parentesi che normalmente si lasciano vuote sono presenti due nuove variabili, argc ed argv[].<\/span><\/p>\n<p><span>int Argc \u00e8 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\u00e0 n+1 poich\u00e8 esso conteggia anche il programma stesso.<\/span><\/p>\n<p><span>char* Argv[] (o equivalentemente **argv) \u00e8 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] \u00e8 salvato il nome del programma stesso.<\/span><\/p>\n<p><span>Vediamo un esempio.<\/span><\/p>\n<p><span>Prendiamo un semplice codice C che legge i dati passati da riga di comando r gli stampa nuovamente nel terminale.<\/span><\/p>\n<pre><span>int main(int argc, char* argv[])<br><br>{<br>  int i;<br><br>  \/\/-- leggiamo ogni parametro presente in linea di comando<br>  for ( i=0 ; i!=argc ; i++ ){  <br>     printf(\"%s\\n\", argv[i]);<br>  }<br><br>return 0;<br><br>}<\/span><\/pre>\n<p><span>Il codice in questione \u00e8 molto semplice. Esso, grazie ad un ciclo for, controlla di volta ogni parametro passato.<\/span><\/p>\n<p><span>Compilando il programma e scrivendo nel terminale:<\/span><\/p>\n<pre><span>.\/programma cane gatto topo<\/span><\/pre>\n<p><span>Il terminale restituir\u00e0:<\/span><\/p>\n<pre><span>.\/programma<br>cane<br>gatto<br>topo<\/span><\/pre>\n<p><span>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\u00e8 cane per i=2 si ha il secondo parametro e cos\u00ec via.<\/span><\/p>\n<p><span>Come si vede l&#8217;uso dei parametri \u00e8 abbastanza facile e permette una versatilit\u00e0 del software abbastanza potente pur non avendo a disposizione una GUI con la quale impostare i valori.<\/span><\/div>\n","protected":false},"excerpt":{"rendered":"<p>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: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54,52,4],"tags":[],"class_list":["post-219","post","type-post","status-publish","format-standard","hentry","category-c","category-didattica","category-opencode"],"views":7094,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=219"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/219\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=219"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}