Pregunta

Estoy más o menos positivo acerca de esto, pero sólo para estar en el lado seguro:

¿La garantía estándar de C y cadenas que (A && B && ...) serán evaluados de izquierda a derecha, y que la evaluación se detendrá tan pronto como hay un 0?

La misma pregunta para los OR. (Tan pronto como hay un 1)

¿Puedo contar con esto para otros idiomas estilo C?

¿Es este código de seguridad:

if (somePtr!=NULL && somePtr->someMember==123)
{
     ...
}
¿Fue útil?

Solución

Sí, está garantizado para C, C ++ y C #. Lo mismo ocurre con Delphi con "Evaluación curcuit corta" habilitado.

Este es un comportamiento numerosas líneas de código se basan en este momento.

Otros consejos

Sí, está estandarizado por tanto C y C ++.

Sí, sus supuestos sobre el orden de las operaciones en C son correctas y el fragmento de código funcionará como se pretende. Me gustaría tener otros idiomas "estilo C" en una base de caso por caso.

Sí lo hace.

Tengo visto a la gente que pensaba que era poco clara, y se sustituye && 's con esta forma:

if (a)
if (b)
if (c)
if (d) {
}

En lo personal creo que eso es un poco feo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top