2010-07-06 35 views
10

puedo escribir simplementeDeclarar e inicializar variables en bucle for

for (int i = 0; ... 

en lugar de

int i; 
for (i = 0; ... 

en C o C++?

(y variable de i ser accesible dentro del bucle solamente?)

+5

intentar esto probablemente habría requerido un menor esfuerzo que publicar esta pregunta al respecto –

+3

@Don: pero daría la respuesta incorrecta si usaras un viejo compilador predefinido (como algunas personas todavía lo hacen). Es mejor preguntar, o mirar en el estándar, que confiar en el comportamiento de tu compilador particular. –

Respuesta

20

Su válida en C++

no era legal en la versión original de C.
pero fue adoptado como parte de C en C99 (cuando algunas de las características de C++ fueron especie de vuelta portado a C)
Uso gcc

gcc -std=c99 <file>.c 

La variable es válida dentro de la instrucción for y la instrucción en la que se realiza el bucle. Si esta es una declaración de bloque, entonces es válida para todo el bloque.

for(int loop = 0; loop < 10; ++loop) 
{ 
    // loop valid in here aswell 
} 

// loop NOT valid here. 
2

Sí y sí. Pero para C, aparentemente su compilador necesita estar en modo C99.

18

Sí, es legal en C++ y en C99.

5

Es perfectamente legal para hacer esto en C99 o C++:

for(int i=0; i<max; ++i) 
{ 
    //some code 
} 

y su equivalente while es:

{ 
    int i=0 
    while(i<max) 
    { 
     //some code 
     ++i; 
    } 
} 
+3

'for' y' while' loops no son equivalentes. Considere lo que sucede si "algún código" incluye una instrucción 'continue'. – jamesdlin

+4

Solo estaba aclarando el alcance de 'i'. Siempre puede tener cuidado de que haya '++ i' antes de llamar' continue', pero de lo contrario, tiene un punto válido. – rubenvb

3

Acutally for(int i=0;i<somevalue;i++) siempre fue perforado en mí como la mejor forma de define un ciclo for en c y C++.

En cuanto a que "i" solo está accesible en su ciclo, debe tener cuidado con los nombres de variables que utiliza. Si declara "yo" como una variable fuera del ciclo y lo está utilizando para otra cosa, entonces va a causar un problema al usar esa misma variable para un contador de ciclo.

Por ejemplo:

int i = 10; 
i = 10 + PI; 

se cambiará automáticamente cuando se pulse el bucle y declaran i = 0

2

puedo escribir simplemente

Sí.

(Y variable i sea accesible solamente en el interior del bucle?)

Depende del compilador y su versión. AFAIK, en los compiladores modernos, solo se puede acceder al interior del lazo. Algunos compiladores antiguos permitieron que fuera accesible fuera del ciclo también. Algunos compiladores me permiten ser accedido fuera del circuito y advertirle sobre el comportamiento no estándar.

que piensan (pero no estoy seguro de ello), que "i fuera del bucle" fue utilizado en algún lugar de VC98 (Visual Studio 6, que yo sepa, también tenía una "i" variable definida a nivel mundial en alguna parte eso podría llevar a un comportamiento extremadamente interesante). Yo creo que (Microsoft) compiladores realizan algún lugar alrededor de alrededor de 2000..2003 empezado a imprimir "extensiones no estándar que se utilizan" para el uso de i fuera del bucle, y, finalmente, esta funcionalidad desaparecieron por completo. No está presente en visual studio 2008.

Probablemente esto sucedió según un estándar pero no puedo dar un enlace o cita en este momento.

0

si se utiliza la variable lado de la salida del bucle será cambiar cada vez que se inicializa el interior del bucle

int i = 0; 
for(int e = 0; e < 10; e++) 
{ 
i = e; 
} 

ahora valor cambiará cada vez que

Cuestiones relacionadas