Oppure

Loading
05/04/14 20:49
DeSa97
su un altro topic del forum ho letto un codice dove c'erano delle etichette e dei goto. degli utenti hanno commentato dicendo che anche se esiste goto in c++, non si dovrebbe usare perchè non porta a una buona programmazione. ma perchè questa cosa? a me sembra abbastanza utile usare le etichette e goto (non sempre, in particolari casi), forse mi sbaglio?
aaa
06/04/14 10:51
XBarboX
L'uso di goto, break e continue e' contro il paradigma della programmazione strutturata.
In parole povere puoi usarli senza problema ma rendi il tuo codice meno leggibile e più difficile da maneggiare.

Inoltre possono essere sempre evitati! Lo hanno dimostrato i due informatici Böhm e Jacopini.
it.wikipedia.org/wiki/…
Infatti ogni programma può essere costituito solo da 3 strutture:
-sequenza (blocco di istruzioni)
-selezione (if)
-ciclo (while,do-while,for)

Ti consiglio anche di vedere questa pagina di wikipedia per capire meglio il concetto di programmazione strutturata: it.wikipedia.org/wiki/…

È "solo" una tecnica di programmazione ma è caldamente consigliata per creare un codice migliore.

Ogni tanto i break e i continue possono essere usati per evitare inutili flag, ma come tutte le cose non bisogna abusarne.

In conclusione evita sempre i goto ed evita il più possibile l'utilizzo di break e continue nei tuoi programmi :k:

aaa
06/04/14 11:22
ZioCrocifisso
In certe situazioni goto è meglio, per esempio quando bisogna uscire da più loop nidificati. Si può fare anche senza goto, usando una variabile e controllandola, ma se si usa goto in questo caso il codice è sicuramente più chiaro e immediato.
aaa
06/04/14 14:44
pierotofy
Postato originariamente da XBarboX:
In conclusione evita sempre i goto ed evita il più possibile l'utilizzo di break e continue nei tuoi programmi


Esistono alcune limitate situazioni in cui l'uso del goto puo' essere utile.

Ad esempio:

int someFunction( void )
{
	result = failure;
	blah = allocate_some_memory();
	if( do_something( blah ) == failure )
	{
		goto bailout;
	}
	
	ack = open_a_file();
	if( process_file( blah, ack ) == failure )
	{
		goto bailout;
	}
	
	hoover = do_something_else();
	if( have_fun( blah, hoover ) == failure )
	{
		goto bailout;
	}
	//	we survived!
	result = success;

bailout:
	if( blah ) free_the_memory( blah );
	if( ack ) close_the_file( ack );
	if( hoover ) clean_this_up( hoover );

	return result;
}
Il mio blog: piero.dev