c++ - tiempo - loop infinito significado
Bucles infinitos-arriba o abajo? (19)
Ahora prefiero el modismo " for (;;)
" porque parece ''sobresalir'' más. Solía usar el modismo " while (true)
" porque pensé que expresaba mejor intención, pero cambié porque creo que el modismo " for (;;)
" es suficientemente conocido como para expresar adecuadamente la intención tanto como yo cree que es mejor siendo más visible.
Algo así como cómo Stroustrup hizo los nuevos moldes en C ++ a propósito feos, por lo que sobresalen.
En el espíritu de preguntas como ¿Prueba tus bucles en la parte superior o inferior? :
¿Qué estilo usas para un ciclo infinito y por qué?
- while (true) {}
- do {} while (verdadero);
- para (;;) { }
- label: ... goto label;
Al escribir código para mí, lo uso para (;;). Otras personas tienden a confundirse por su sintaxis y, por lo tanto, para el código que otras personas deben ver / usar, lo uso mientras (verdadero).
Infinite tail-recursión;)
De alguna manera es dependiente del compilador ...
Los bucles infinitos son una mala idea, pero en la práctica eso no siempre se sostiene.
Prefiero mientras (1) {} pero me aseguro de que algo dentro del ciclo pueda hacer que explote.
Me gusta usar el enfoque for (;;) porque el compilador MSVC ++ se queja del enfoque while loop:
void main()
{
while(1) // test.cpp(5) : warning C4127: conditional expression is constant
{
}
for(;;)
{
}
}
POR FAVOR VENGA DE (23)
Prefiero while(1)
o while(true)
- es el más claro. do { } while(true)
parece una ofuscación innecesaria. Del mismo modo, for(;;)
puede ser confuso para las personas que nunca lo han visto antes, mientras que while(true)
es muy intuitivo. Y no hay absolutamente ninguna razón para hacer la label: ... goto label;
, es simplemente más confuso.
Usualmente uso for(;;) { }
que siempre pienso como "para siempre".
Algunos idiomas ofrecen una construcción repeat { }
que se repetirá de forma nativa para siempre. Encuentro el constructo for(;;) { }
visualmente el más similar a este porque es muy diferente del constructo for()
normal. Este es un atributo importante para un ciclo infinito que while(1) { }
realmente no tiene.
Usualmente uso while() {}
, pero después de saber que for(;;) {}
no es una especie de sintaxis loca, me aseguraré de usar la opción más única.
Diferencia los bucles infinitos de los condicionales reales, ves.
Utilizo for (;;)
en los lenguajes de estilo C y es while true
en los idiomas que no admiten esa construcción.
Aprendí el método de for (;;)
en K & R y siempre me ha parecido idiota.
offtopic: si piensas en lo que estás tratando de expresar, normalmente no necesitarás un ciclo infinito.
porque (;;) es lo que suelo ver.
#define forever for(;;)
forever {
/*stuff*/
}
for (;;)
{
/* No warnings are generated about constant value in the loop conditional
plus it is easy to change when you realize you do need limits */
}
for(;;);
Texto de relleno
while(true) {}
Parece transmitir el significado del ciclo de la manera más efectiva.
while(1)
{
//do it
}
Así es como me muevo.
10 some l33t code
20 goto 10
Deja que el fuego comience ...
Si el ciclo es un verdadero bucle infinito (es decir, no hay una condición de interrupción, solo un evento externo puede terminar la ejecución de la secuencia / proceso), entonces realmente prefiero la etiqueta y el goto
. Este es el por qué:
En primer lugar, el uso de while
, for
y do ... while
implica que el ciclo podría terminar. Incluso si la condición de terminación nunca se puede lograr, el significado sintáctico de estas construcciones es que hay alguna condición de terminación.
En segundo lugar, el uso de una construcción de bucle introduce un nivel extra de sangría. Odio la sangría que no es necesaria. Desperdicia bienes raíces valiosos columnares.
En tercer lugar, el único bucle infinito verdadero es el que salta incondicionalmente al principio del bucle. Solo goto
ajusta exactamente a ese propósito.
La verdad es que realmente no me importa mucho al respecto. Todos hacen el trabajo y la mayoría dará como resultado exactamente las mismas instrucciones de ensamblaje de todos modos. Sin embargo , la asamblea que se genera con toda probabilidad será un salto incondicional (si el optimizador vale la pena), que se asigna directamente a la construcción C, ¿niños? Así es ... tu viejo amigo goto
.