Errores, fallos, preguntas - página 2641

 
bool Func()
{
  for(int i=1;;++i)
  {
    if(i==1)
      continue;
    if(i==100)
      return false;
  }
}

void OnStart()
{
  Func();
}

Hay un asesor de este tipo. Arroja un error

'}' - not all control paths return a value      Test.mq5        10      1

Si comentas fuera continúa, está bien. ¿Soy el único que piensa que esto es raro?

 
traveller00:

Hay un asesor de este tipo. Arroja un error

Si comentas fuera continúa, está bien. ¿Soy el único que piensa que es extraño?

Si una función no se declara como void, debe devolver un valor:

bool Func()
{
  for(int i=1;;++i)
  {
    if(i==1)
      continue;
    if(i==100)
      return false;
  }
  //---
  return(false);
}
 
La única salida de esta función es a través de i==100. ¿Por qué cree que la aparición de continue supone una salida adicional de la función?
 
traveller00:
La única forma de salir de esta función es a través de i==100. ¿Por qué cree que la aparición de continuar conduce a una salida adicional de la función?

La salida única o múltiple no es importante. Lo importante es que USTED declaró una función con un tipo distinto de void - lo que significa que la función DEBE devolver un valor.

 

La función y devuelve un valor

bool Func()
{
  for(int i=1;;++i)
  {
    if(i==1)
      continue;
    if(i==100)
      return false;
  }
}

Esta es la única forma de salir de la función. Es decir, el único lugar donde tiene que devolver un valor. Y el compilador C/C++ está de acuerdo conmigo. Si MQL todavía tiene sus propias normas sobre esto, ¿por qué se construye normalmente si se elimina la continuación?

 
traveller00:

La función y devuelve un valor

Esta es la única forma de salir de la función. Es decir, el único lugar donde tiene que devolver un valor. Y el compilador C/C++ está de acuerdo conmigo. Si MQL todavía tiene sus propias normas sobre esto, ¿por qué se construye normalmente si se elimina la continuación?

El compilador no sabe si el bucle será procesado y si el código alcanzará el retorno; Por lo tanto, requiere una característica de seguridad.

 
Alexey Viktorov:

El compilador no sabe si el bucle será procesado y si la ejecución del código llegará al retorno; por eso requiere una precaución de seguridad.

El compilador C/C++ lo sabe perfectamente. El compilador MQL está basado en uno de los compiladores C/C++, según tengo entendido. Pero además, aunque tenga su propia lógica, ¿por qué sabe sin continuar, pero con continuar este conocimiento desaparece?

 
traveller00:

El compilador C/C++ lo sabe perfectamente. El compilador MQL está basado en uno de los compiladores C/C++, según tengo entendido. Pero además, aunque tenga su propia lógica, ¿por qué sabe sin continuar, pero con continuar este conocimiento desaparece?

Probablemente porque sólo una persona a primera vista mira ese código

bool Func()
{
  for(int i=1;;++i)
  {
    if(i==100)
      continue;
    if(i==100)
      return false;
  }
}
puede imaginar lo que va a pasar sin pensar. En mi opinión, las quejas deberían ser para C y C++, no para MQL. Es mql el que protege contra esos errores accidentales.
 
traveller00:

La función y devuelve un valor

Esta es la única forma de salir de la función. Es decir, el único lugar donde tiene que devolver un valor. Y el compilador C/C++ está de acuerdo conmigo. Si MQL sigue teniendo sus propias normas en este sentido, ¿por qué se construye normalmente si se elimina la continuidad?

Esta función suya es un error. Si i==100, la siguiente comprobación para el mismo i==100 no funcionará. Y obtendrá un bucle infinito.

 
Estimados desarrolladores, por favor, señalen el error.
Обсуждение статьи "Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II)"
Обсуждение статьи "Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II)"
  • 2018.06.10
  • www.mql5.com
Опубликована статья Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II): Автор: Anatoli Kazharski...