Esiste un interruttore del compilatore che modifica l'ambito delle variabili nei cicli? [chiuso]

0

Sto usando del codice, che usa le variabili dichiarate in un ciclo dopo il ciclo. Ad esempio


for (int i = 0; i != 10; i++)
{
   // do stuff
}

int x = i;

Ottengo l'errore non definito "i". C'è un interruttore del compilatore per cambiare questo (in VC ++ 2015)?

    
posta Dennis R 14.07.2016 - 17:48
fonte

3 risposte

4

prova questo ...

int i = 0;    
// don't use != You could end up with an infinite loop if something ever steps over i=10
for (; i < 10; i++)
{
   // do stuff
}

int x = i;
    
risposta data 14.07.2016 - 18:01
fonte
4

Sì, apparentemente c'è una tale opzione. Vi consiglio caldamente di evitare di usarlo. Risolvi il codice.

Nelle prime versioni di C ++, l'ambito di una variabile definita in un'intestazione di ciclo for estesa all'estremità del blocco contenente il ciclo, rendendo valido il codice nella domanda. Nelle versioni moderne del linguaggio, l'ambito termina alla fine del ciclo, rendendo il tuo codice non valido. La modifica è stata apportata nello standard ISO C ++ del 1998, se non prima, quindi sembra che tu stia guardando un codice piuttosto vecchio.

Secondo questa pagina web per Visual Studio 2015, il /Zc:forScope- L'opzione indica al compilatore di implementare la vecchia semantica.

The /Zc:forScope- option is deprecated and will be removed in a future release. Use of /Zc:forScope- generates deprecation warning D9035. Standard behavior is to let a for loop's initializer go out of scope after the for loop. Under /Zc:forScope- and /Ze, the for loop's initializer remains in scope until the local scope ends.

    
risposta data 14.07.2016 - 21:19
fonte
2

Fallo bene o non farlo affatto.

unsigned i; /* NOT int: i is constrained to 0..11 by the for-stmt */

for (i = 0; i < 10; i++)
{
   // do stuff
}

int x = i;

Se vuoi che si trovi nell'ambito del ciclo for, dichiaralo al di fuori del ciclo for. L'intero punto di consentire la dichiarazione nell'istruzione for è di limitare l'ambito dell'indice al ciclo e non consentirgli di svignarsela.

    
risposta data 14.07.2016 - 18:10
fonte

Leggi altre domande sui tag