Por qué MSVC genera una advertencia C4127 cuando se usa constante en "while"-C
visual-c++ compiler-warnings (2)
Condicionales constantes son a menudo simplemente errores. Considera esto:
unsigned k;
...
while (k>=0)
{
...
}
La condición k>=0
tendría sentido si k fuera un int firmado, pero no para unsigned. Un desarrollador descuidado olvida que k fue declarado sin firmar y que lo usaría como si fuera utilizable como un número negativo. El compilador intenta ser útil y le advierte sobre esto y while(1)
cae para el compilador en la misma clase de problema. for(;;)
es preferible porque inequívocamente significa `loop para siempre
Por código,
while(1)
{
/* ..... */
}
MSVC genera la siguiente advertencia.
warning C4127: conditional expression is constant
La página MSDN para la advertencia sugiere usar for(;;)
lugar de while(1)
. Me pregunto qué ventaja for(;;)
es dar y por qué advierte sobre el uso constante en el while
.
¿Qué bandera debería usar en GCC para obtener la misma advertencia?
for(;;)
y while (true)
son diferentes en que el primero es un caso especial definido como un ciclo infinito, mientras que el segundo es una especie de abuso que dice "verdadero, siempre".
La advertencia aparece porque los bucles infinitos cuando no los quieres son bastante malos, por lo que te advierte que podrías tener uno al primer signo. Pero al usar for(;;)
, has dicho explícitamente "bucle esto para siempre", y no hay nada por lo que advertir.
No creo que GCC tenga una advertencia equivalente.