Label dopo if

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

Avatar utente
Foto UtenteDavideDaSerra
213 1 7
Expert
Expert
Messaggi: 279
Iscritto il: 21 gen 2018, 17:41
0
voti

[11] Re: Label dopo if

Messaggioda Foto UtenteDavideDaSerra » 30 mar 2024, 19:53

Da prove con GCC mi risulta che per il compilatore la definizione di una label non sia trattata come un'istruzione.

ES:

Codice: Seleziona tutto

if (false)
label: printf("CIAO ");

printf("MONDO");
goto label;


stampa MONDO CIAO ...

E non da errori, mi aspetterei a runtime qualcosa come "undefined label" ma il codice esegue correttamente.

Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
Messaggi: 9003
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino
0
voti

[12] Re: Label dopo if

Messaggioda Foto UtenteWALTERmwp » 30 mar 2024, 21:52

DavideDaSerra ha scritto:(...) mi aspetterei a runtime qualcosa come "undefined label" (...)
perché?

Saluti
W - U.H.F.

Avatar utente
Foto UtenteGuidoB
17,8k 7 12 13
G.Master EY
G.Master EY
Messaggi: 2812
Iscritto il: 3 mar 2011, 15:48
Località: Madrid
Contatta:
0
voti

[13] Re: Label dopo if

Messaggioda Foto UtenteGuidoB » 30 mar 2024, 23:37

Il goto in C è utile per gestire eccezioni, o saltare fuori da più di un livello di blocchi annidati (dove non basta il break).
In entrambi i casi, molti dichiarano variabili aggiuntive da utilizzare come flag ed evitare così i goto, ma è meno efficiente e spesso meno chiaro.
Insomma, in qualche raro caso il goto, considerato da molti la pecora nera del C, è utile per ottenere codice più pulito ed efficiente.

Ah, l'ho anche visto utilizzare in un'implementazione dell'algoritmo quicksort, per evitare una chiamata ricorsiva alla fine di una procedura, e permette di risparmiare posizioni di stack.
Big fan of ƎlectroYou!       Ausili per disabili e anziani su ƎlectroYou
Caratteri utili: À È É Ì Ò Ó Ù α β γ δ ε η θ λ μ π ρ σ τ φ ω Ω º ª ² ³ √ ∛ ∜ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ∃ ∄ ∆ ∈ ∉ ± ∓ ∾ ≃ ≈ ≠ ≤ ≥


Torna a “Firmware e programmazione”