[C con Clase] Continuacion de Recursividad y static

Steven Davidson steven en conclase.net
Sab Mar 17 21:31:20 CET 2007


Hola Alejandro,

El pasado 2007-03-17 17:18:10, Alejandro escribió:

A> Lo siento, no se que me pasó con el mensaje de Recursividad y static. Continúo
A> dónde lo dejé :-):
A> Si la definición de "función()" es:
A> int funcion()
A> {
A>        static int a = 10;
A>        a--;
A>        return a;
A> }

Agrego lo que dijiste después en el otro mensaje:

2. Si en "main" tengo:
  
   cout << funcion() << funcion() << funcion() << funcion() << funcion()
   <<  funcion() << funcion();

A> ¿Por qué me aparece en pantalla 2 3 4 5 6... en vez de salirme 9 8 7 6 5...?

Me temo que esto tiene que ver con el orden de evaluación que en estos casos no está garantizado que se evalúe las subexpresiones de izquierda a derecha. La razón de no imponer estas restricciones es que se puede generar mejor código, pero obviamente, puede ocurrir resultados indefinidos, como en el caso que presentas.

La solución es separar las subexpresiones en diferentes sentencias. Por ejemplo,

cout << funcion();
cout << funcion();
cout << funcion();
cout << funcion();


Espero haber aclarado la duda.

Steven


Más información sobre la lista de distribución Cconclase