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)
{
...
}
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.