[Lugge] Re: [Lugge] Re: 2° esercizio C

  • From: Matteo Ianeselli <ianezz@xxxxxxxxxx>
  • To: lugge@xxxxxxxxxxxxx
  • Date: Thu, 19 Jul 2001 11:19:11 +0200

Usando la tastiera di Massimo Arnaudo, uno sconosciuto ha scritto:

 > > Massimo Arnaudo, pigiando tasti a caso sul citofono, ha scritto:
 > > 
 > 
 > Bè, effettivamente...

E` solo il randomizzatore che uso. Qualcuno s'era lamentato che `xxx
wrote:' era monotono e cosi`... :-)

 > > 2) se `n' e` la dimensione dell'array, al massimo puoi accedere
 > >    all'elemento con indice n-1, altrimenti sfori. 
 > 
 > Se ti riferisci alla riga
 > 
 >              ...
 >              s[s1] = input[n1];
 >              --n;  <--- quì ho commesso un errore di battitura, avrei
 >              voluto  
 >              --n1;
 >              ...
 > altrimenti non ho compreso il perché.

Piu` che altro:

        ...
        char input[n];
        int s1, n1;
        n1 = n;
        ...
        if (input[n1] == '\n')


Inizialmente n1 == n; l'array input[] e` di n elementi, e al primo
giro tu pertanto accedi all'elemento di indice n (invece che n-1), per
cui sfori.

 > > 4) hai dichiarato che la funzione ritorna un char, ma non ritorni
 > >    nulla.
 > >
 > 
 > Allora non ho ben capito il paragrafo delle funzioni...
 > Pensavo che essendo manipolata, la stringa risulterebbe nuova, frutto di una
 > funzione.

Occore distinguere quello che e` il valore di ritorno di una funzione
da quello che e` la modifica sul posto dei parametri passati per
riferimento (gli array in C son passati per riferimento).

Le funzioni C ritornano solo i valori che metti dopo i return. 

Altri linguaggi (come Perl ad esempio) considerano come valore di
ritorno il valore dell'ultima espressione eseguita nel corpo della
funzione prima di ritornare, ma NON e` il caso del C.

Se una funzione non deve ritornare nulla, va dichiarata in modo che
ritorni un tipo `void'. Se dichiari che ritorna un tipo char, deve
ritornare un char. Il minimo della pena e` un warning del compilatore.

 > > 5) nelle intenzioni mi pare che tu voglia far fare a questa funzione
 > >    qualcosa di piu` della semplice inversione: vuoi anche che elimini
 > >    certi caratteri dalla fine ('\n', il newline). Ti suggerirei invece
 > >    di scrivere funzioni che facciano una sola cosa alla volta, e solo
 > >    quella.
 > 
 > Hai perfettamente ragione, ho fatto ciò partendo da un esercizio appena
 > scritto.

 > Devo dire che il libro 'Linguaggio C' in questo è un pó carente.

Beh, e` pur sempre della prima meta` degli anni '70, anche se e` stato
rivisto piu` volte, e i primi compilatori (e linker) consideravano
significativi solo la prima manciata di caratteri di ogni simbolo
(nomi di variabili e funzioni), del tipo solo i primi 8 caratteri.

Oggi come oggi un compilatore dovrebbe considerare come significativi
i primi 255, per cui il problema non si pone...

Peraltro, anche l'editor che uno usa influisce molto sullo stile dei
sorgenti. Se uno usa un editor che ha l'autocompletamento delle parole
(i.e. Emacs tramite M-/, e probabilmente anche Vim in qualche modo),
usare nomi di simboli del tipo `refreshAllVisibleClientInfo()') non e`
un problema :-)

C'e` anche da dire che se oggi come oggi uno lavora da sviluppatore in
un'azienda, solitamente lavora in gruppo, e ancor piu` che scrivere
codice che funziona e` importante scrivere codice che i suoi colleghi
siano in grado di leggere e correggere.

La pena e` quello di diventare l'unico manutentore di un pezzo di
codice (e solo quel pezzo di codice), che se da un lato garantisce
l'occupazione [ :-) ], dall'altro blocca pure la carriera, pone
ostacoli alle ferie, e incrementa la monotonia generale [ :-( ].
-- 
UNIX diapers by Pannolini USPTO 2039887  http://www.uspto.gov
Matteo Ianeselli      ianezz AT sodalia.it  (+39) 0461 316452
Visita il LinuxTrent:            http://www.linuxtrent.it
<========----------
 Prima di scrivere in m-list per favore leggi il regolamento
 http://lugge.ziobudda.net/benvenuto.html



Other related posts: