View Full Version : [C] Dichiarare variabili in uno switch
17Qwerty71
11-12-2005, 02:06
Ma non è possibile dichiarare della variabili in un case di uno switch?
Perchè il compilatore mi dà errore, mentre se le dichiaro prima dello switch no :confused:
DanieleC88
11-12-2005, 09:49
Perché l'ANSI C prevede così. :D
Nello standard dell'89 (C89) le dichiarazioni vanno obbligatoriamente messe all'inizio del metodo, mentre nello standard del '99 (C99), come nel C++, le puoi mettere dove vuoi tu.
Ma non è possibile dichiarare della variabili in un case di uno switch?
Perchè il compilatore mi dà errore, mentre se le dichiaro prima dello switch no :confused:
Scusa ...
int a;
/* ... */
switch (a)
{
case 1:
{
int b=10; /* Perfettamente legale ;) */
/* ... */
}
break;
}
così non ti va bene??? :p
DanieleC88
11-12-2005, 12:16
Hmm... a proposito, quale compilatore usi?
17Qwerty71
11-12-2005, 13:14
Hmm... a proposito, quale compilatore usi?
Il MinGW :)
Ma quindi io se voglio mettere una dichiarazione dentro un case o compilo in c++ o la metto prima che viene eseguito lo switch? :confused:
Il MinGW :)
Ma quindi io se voglio mettere una dichiarazione dentro un case o compilo in c++ o la metto prima che viene eseguito lo switch? :confused:
Come ho già detto con l'esempio di prima, non ti va bene mettere la dichiarazione dentro un blocco { } ????
17Qwerty71
11-12-2005, 14:40
Come ho già detto con l'esempio di prima, non ti va bene mettere la dichiarazione dentro un blocco { } ????
Grazie, così funziona :)
DanieleC88
12-12-2005, 14:09
Il MinGW :)
Ma quindi io se voglio mettere una dichiarazione dentro un case o compilo in c++ o la metto prima che viene eseguito lo switch? :confused:
Si, se non crei un nuovo blocco come andbin suggerisce. ;)
17Qwerty71
12-12-2005, 14:38
Si, se non crei un nuovo blocco come andbin suggerisce. ;)
Ma chi ha avuto stà bella idea di non permettere la dichiarazione all'interno di un case? :confused:
Non dovrebbe essere già di suo il case un blocco distinto?
Ma chi ha avuto stà bella idea di non permettere la dichiarazione all'interno di un case? :confused: Beh, non so il motivo esatto del perchè nell'ANSI C (C89) non l'abbiano permesso e poi successivamente con il C99 e il C++ l'abbiano invece permesso. Queste sono scelte progettuali del linguaggio che non dipendono da noi mortali programmatori. :D
A me personalmente non serve molto, anzi poche volte mettere una dichiarazione in mezzo al codice o in un sotto-blocco. Io normalmente sono abituato a dichiarare tutte le variabili che mi servono in testa alla funzione. Poi, ogni tanto, mi capita di inserire una dichiarazione nel blocco di un if o di un case (con { }), magari perché so già che quella variabile la userò proprio solo in quel blocco e basta e non nel resto della funzione. E questo vale in particolar modo in Windows quando programmo a livello SDK ed ho uno switch con tanti case dei vari messaggi di Windows.
Non dovrebbe essere già di suo il case un blocco distinto?No
17Qwerty71
12-12-2005, 17:57
E questo vale in particolar modo in Windows quando programmo a livello SDK ed ho uno switch con tanti case dei vari messaggi di Windows.
Proprio a questo mi serviva dichiararle nel case :D
DanieleC88
13-12-2005, 16:49
Ma chi ha avuto stà bella idea di non permettere la dichiarazione all'interno di un case? :confused:
Non dovrebbe essere già di suo il case un blocco distinto?
Il case non è un blocco distinto. Proprio per questo le dichiarazioni vanno comunque all'inizio delle funzione. Questo era per esplicitare le variabili senza farle "perdere" nel codice, ad esempio dichiarandole a metà funzione, ma anche perché in tal caso le variabili sarebbero state valide solo all'interno di un case, e inaccessibili ai case precedenti a quello contenente la dichiarazione. Lo standard C99 non mette questa restrizione, e nemmeno il C++ lo fa.
ciao ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.