Considera attentamente i due diagrammi di flusso e le codifiche corrispondenti
![]() |
If A > 0 Then Begin If B > 0 Then Begin Istr11; Istr12; End Else Begin Istr21; Istr22; End; End; |
![]() |
If A > 0 Then Begin If B > 0 Then Begin Istr11; Istr12; End End Else Begin Istr21; Istr22; End; |
Un programmatore inesperto potrebbe produrre, per il secondo diagramma di flusso, il codice seguente
If A > 0 Then If B > 0 Then Begin Istr11; Istr12; End Else { ... ERRORE! ... } Begin Istr21; Istr22; End;
Purtroppo il compilatore lo interpreterà come corrispondente al primo diagramma…
- il compilatore non prende in considerazione l’indentazione ma associa correttamente l’Else all’ultimo If rimasto aperto
- il ramo Else si sposta da sinistra verso destra, ciondola
- l’uso delle etichette di apertura e chiusura dei blocchi risolve l’ambiguità.
Il programmatore alle prime armi dovrebbe utilizzare sempre le etichette di inizio e fine blocco, anche nel caso di istruzioni singole, per evitare di incorrere nell’errore dell’else ciondolante.