No hay punto. Después de todo, la especificación dice langauge ($ 6.5.3/2),
, o ambas, de la condición y la expresión se puede omitir. A condición faltante implica la cláusula implícita mientras que la cláusula es equivalente a mientras que (verdadero).
Así for (; ;)
es equivalente a while(true)
incluso de acuerdo con la Norma. Por lo tanto, no veo ninguna razón por la cual el compilador debería dar una advertencia en un caso pero no en el otro.
-
Si el compilador decide dar la advertencia, a continuación, en mi opinión, el compilador debe dar aviso cuando la condición es falta a diferencia de cuando está presente, por lo que la advertencia se interpretaría como sugerencia para que el programador mencione su intención claramente y explícitamente.
quiero decir, es for (;;)
más probable que sea un error tipográfico que el explícita mención de la condición en la for (;true;)
. Este último le dice a la intención clara y explícita del programador. Como Steve dice en el comentario:
Para un valor int y, char x = y es equivalente a char x = (char) y, pero es posible que desee una advertencia para una implícita conversión de restricción de el primero, pero no el segundo.
¡Así que la intención explícita no debería recibir una advertencia, mientras que la intención implícita debería recibirla!
porque no hay ninguna expresión condicional en el tercer enunciado ... mientras está allí en el segundo y tercer ... ¿cómo puede el compilador generar una advertencia con respecto a la expresión condicional sin tener ninguna? –
Normalmente termino deshabilitando C4127 con '#pragma warning', especialmente cuando uso boost. –
Relacionado: http://stackoverflow.com/questions/224421/constant-value-in-conditional-expression – CesarB