Newsgroup: it.comp.lang.c++
Titolo: fall through

Salve a tutti,
non sono sicura di aver capito bene l'istruzione switch!
Dopo aver fatto qualche tentativo mi pare di poter estrapolare la seguente
conclusione:
se non metto il break alla fine di ogni clausola vengono eseguite tutte le
singole istruzioni a partire dal case del valore valutato in switch
(espressione)
Sbaglio?
Poi volevo ringraziare Daniele Pallastrelli che a fine Marzo mi ha spiegato
l'uso di enum...ora che ho ripreso in mano il c++ però mi accorgo di non
averlo ancora capito nonostante il suo intervento :-(
Mi potete aiutare anche in questo per favore?
Lo so che faccio domande stupide ma se non capisco mi scoraggio e vado a
rilento.
Grazie in anticipo,
petalo

 rilento.
Non scoraggiarti. Ma andare a rilento non e' sempre un male!
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

Sbaglio?
Non sbagli.
Supponi di avere :
  switch ( i ) {
         case 1 : printf( "ciao 1\n" ) ;
         case 2 : printf( "ciao 2\n" ) ;        
         case 3 : printf( "ciao 3\n" ) ;
  }
  printf( "prima istruzione dopo lo switch\n" ) ;
e' equivalente al seguente pseudocodice :
         if ( i == 1 ) goto label_1 ;
         if ( i == 2 ) goto label_2 ;
         if ( i == 3 ) goto label_3 ;
label_1: printf( "ciao 1\n" ) ;
label_2: printf( "ciao 2\n" ) ;
label_3: printf( "ciao 3\n" ) ;
         printf( "prima istruzione dopo lo switch\n" ) ;
I break (che non sono stati usati) rappresentano un salto alla prima
istruzione dopo lo switch, per cui scrivere :
  switch ( i ) {
         case 1 : printf( "ciao 1\n" ) ; break ;
         case 2 : printf( "ciao 2\n" ) ; break ;        
         case 3 : printf( "ciao 3\n" ) ; break ;
  }
  printf( "prima istruzione dopo lo switch\n" ) ;
equivale a scrivere :
         if ( i == 1 ) goto label_1 ;
         if ( i == 2 ) goto label_2 ;
         if ( i == 3 ) goto label_3 ;
label_1: printf( "ciao 1\n" ) ; goto fine ;
label_2: printf( "ciao 2\n" ) ; goto fine ;
label_3: printf( "ciao 3\n" ) ; goto fine ;
   fine: printf( "prima istruzione dopo lo switch\n" ) ;

 Non scoraggiarti. Ma andare a rilento non e' sempre un male!
Fino a un certo punto, se fai cose nuove dopo che ti sei impantanato su un
dettaglio per una settimana intanto hai dimenticato quel poco che sapevi
(che comunque non può essere ben assimilato almeno all'inizio)
Grazie per la risposta su switch :-)
petalo

 Supponi di avere :
Grazie per la chiarissima spiegazione :-)
Una sola curiosità: l'hai elaborata tu o c'è un libro che affronta i
concetti in questo modo?
Ciao,
petalo

concetti in questo modo?
L'ho elaborata io (il che significa che non e' detto sia priva di
errori).

 leggibilita` del programma, sbaglio?
Si`, e` un'alternativa (piu` efficiente) del #define per associare dei
valori costanti a delle etichette
es:
enum giorni {lun = 1, mar, mer, gio, ven, sab, dom);
Questo ti permette di fare riferimento all'interno di un programma
(diciamo un agenda) ai giorni della settimana con i loro nomi e non con
dei semplici numeri (aumentando appunto la leggibilita`). Puoi
specificare l'intero (*solo* integer, non altro) per ogni elemento o
indicare solo il primo (i successivi sono in progressione).
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Let me make your mind, leave yourself behind
Be not afraid

 ha scritto nel messaggio
news:xtBD6.53020$s93.4...@news.infostrada.it...

 indicare solo il primo (i successivi sono in progressione).
Grazie per la spiegazione!
Se volessi dichiarare una variabile di tipo giorni potrei farlo?
E avrebbe un senso?
Grazie ancora.
petalo

 wrote in message
news:9bv026$b5clt$1...@ID-43948.news.dfncis.de...

Ovviamente si. Non solo, giorni e' un tipo univoco sul quale puoi anche fare
l'overload di funzioni. Ovvero:
void f(int);
void f(giorni);
...
f(dom); // chiama f(giorni), non f(int)
