[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 721

 
Abzasc:

No se trata de multiplicar variables, muchas condiciones y contadores.




la cuestión es escribir correctamente entonces, no usar abreviaturas del lenguaje:

int a;
for(a=0;a<8;a++){
//здесь что то делаем
}
for(a=0;a<8;a++){
//делаем что нибудь другое
}
 
Abzasc:

No se trata de crear variables, muchas condiciones y contadores.

Bueno, por favor, el compilador permite hacer esas cosas...

//+------------------------------------------------------------------+
int start()
  {
  bool flag;
  
   if(flag){
      for(int a = 0; a < 10;a++){
         Print("a = ", a);
      }
   }else{
      for(a = 10; a > 0;a--){
         Print("a = ", a);
      }
   }
  }
//+------------------------------------------------------------------+
La bandera por defecto es False, por lo que el primer bucle for en el que se declare la variable a no se ejecutará, lo que no impide que la misma variable "no declarada" se utilice en la rama else : )
 
Abzasc:

La condición si

aquí hacemos algo

de lo contrario, si otra condición

hacer otra cosa

No se trata de crear variables, muchas condiciones y contadores.

Esto no requiere que se reinicie la variable. Haz todo de acuerdo con lo que has escrito y tu variable a se utilizará en los lugares adecuados de tus ramas lógicas sin necesidad de reiniciarlas. Decláralo una vez y utilízalo en tu beneficio y en el de la humanidad... :) Lo principal es no perderse dónde y para qué se usa...
 
ToLik_SRGV:

por lo que el primer bucle for en el que se declare la variable a no se ejecutará

El bucle debe ejecutarse siempre.
 
IgorM:


el punto de escribir correctamente entonces, en lugar de utilizar abreviaturas del lenguaje:

Todo el problema era la falta de {}, ¿no? Gracias.
 
artmedia70:
Esto no requiere que se reinicie la variable. Haz todo de acuerdo con lo que has escrito y tu variable a se utilizará en los lugares adecuados de tus ramas lógicas sin necesidad de reiniciarlas. Decláralo una vez y utilízalo en tu beneficio y en el de la humanidad... :) Lo principal es no perderse dónde y para qué se usa...
Lo hice, en 715 pp, 18.07.2010 14:56, no puse paréntesis después del contador...
 

El "efecto" que se muestra arriba demuestra que MQL-máquina primero busca en el archivo EX4 las variables declaradas, y las crea independientemente de las ramas lógicas en su totalidad. Por un lado resulta que no se ahorra RAM, y por otro lado se pueden crear construcciones similares, aunque en mi opinión este estilo no es la mejor opción.

 
Abzasc:
Todo el problema estaba en la falta de {}, ¿no? ¡Muchas gracias!


Todo el problema estaba en la declaración de la variable:

int a;

Yo la declaro y luego la uso donde y cuando sea necesario, mientras que tú tenías una declaración repetida de una variable - lo más probable es que el compilador no se la haya saltado

Si sólo tienes una sentencia en el bucle entonces no necesitas {}, pero si tienes más entonces tienes que poner {}, de lo contrario buscarás por qué el bucle no se calcula correctamente

SZZY: Si acabas de empezar, pon paréntesis después de "for", ya lo entenderás después

 
ToLik_SRGV:

El código de IgorM no da ningún error. No creo que a se asigne memoria en función del número de menciones en las ramas, así que está bien.
 
Abzasc:
El bucle debe ejecutarse siempre.

¿Qué tiene que ver el bucle con esto? Es sólo un ejemplo de que una variable creada en un bloque que no se utiliza sigue en "juego" y será visible y utilizable durante todo el método start(), sin necesidad de reinicializarla, y mucho menos de desinicializarla antes de reutilizarla.