Fehler, Irrtümer, Fragen - Seite 2641

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

void OnStart()
{
  Func();
}

Es gibt einen solchen Berater. Es wird ein Fehler ausgelöst

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

Wenn Sie weiter kommentieren, ist das in Ordnung. Bin ich der Einzige, der das seltsam findet?

 
traveller00:

Es gibt einen solchen Berater. Es wird ein Fehler ausgelöst

Wenn Sie weiter kommentieren, ist das in Ordnung. Bin ich der Einzige, der das seltsam findet?

Wenn eine Funktion nicht als void deklariert ist, muss sie einen Wert zurückgeben:

bool Func()
{
  for(int i=1;;++i)
  {
    if(i==1)
      continue;
    if(i==100)
      return false;
  }
  //---
  return(false);
}
 
Der einzige Ausgang aus dieser Funktion ist i==100. Warum glaubt er, dass das Erscheinen von continue zu einem zusätzlichen Verlassen der Funktion führt?
 
traveller00:
Der einzige Ausweg aus dieser Funktion ist i==100. Warum glaubt er, dass das Erscheinen von continue zu einem zusätzlichen Ausstieg aus der Funktion führt?

Ob es sich um eine einfache oder mehrfache Ausgabe handelt, spielt keine Rolle. Wichtig ist, dass SIE eine Funktion mit einem anderen Typ als void deklariert haben - was bedeutet, dass die Funktion einen Wert zurückgeben MUSS.

 

Die Funktion und gibt einen Wert zurück

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

Dies ist die einzige Möglichkeit, die Funktion zu verlassen. Das ist die einzige Stelle, an der sie einen Wert zurückgeben muss. Und der C/C++-Compiler stimmt mit mir überein. Wenn MQL hat noch seine eigenen Standards auf diese, warum baut es normal, wenn weiterhin entfernt wird?

 
traveller00:

Die Funktion und gibt einen Wert zurück

Dies ist die einzige Möglichkeit, die Funktion zu verlassen. Das ist die einzige Stelle, an der sie einen Wert zurückgeben muss. Und der C/C++-Compiler stimmt mit mir überein. Wenn MQL hat noch seine eigenen Standards auf diese, warum baut es normal, wenn weiterhin entfernt wird?

Der Compiler weiß nicht, ob die Schleife abgearbeitet wird und ob der Code den Return erreicht; daher ist eine Sicherheitsfunktion erforderlich.

 
Alexey Viktorov:

Der Compiler weiß nicht, ob die Schleife abgearbeitet wird und ob die Codeausführung den Return erreicht; deshalb ist eine Sicherheitsvorkehrung erforderlich.

Der C/C++-Compiler weiß das sehr gut. Der MQL-Compiler basiert auf einem der C/C++-Compiler, soweit ich das verstanden habe. Aber selbst wenn es seine eigene Logik hat, warum weiß es ohne continue, aber mit continue ist dieses Wissen weg?

 
traveller00:

Der C/C++-Compiler weiß das sehr gut. Der MQL-Compiler basiert auf einem der C/C++-Compiler, soweit ich das verstanden habe. Aber selbst wenn es seine eigene Logik hat, warum weiß es ohne continue, aber mit continue ist dieses Wissen weg?

Wahrscheinlich, weil nur eine Person auf den ersten Blick auf solchen Code schaut

bool Func()
{
  for(int i=1;;++i)
  {
    if(i==100)
      continue;
    if(i==100)
      return false;
  }
}
können ohne nachzudenken herausfinden, was passieren wird. Meiner Meinung nach sollten sich die Beschwerden auf C und C++ beziehen, nicht auf MQL. Es ist mql, das vor solchen versehentlichen Fehlern schützt.
 
traveller00:

Die Funktion und gibt einen Wert zurück

Dies ist der einzige Ausgang aus der Funktion. Das ist die einzige Stelle, an der sie einen Wert zurückgeben muss. Und der C/C++-Compiler stimmt mit mir überein. Wenn MQL noch seine eigenen Standards in dieser Hinsicht hat, warum baut es normal, wenn continue entfernt wird?

Diese Funktion von Ihnen ist ein Fehler. Wenn i==100, wird die nächste Prüfung für dasselbe i==100 nicht funktionieren. Und Sie werden eine Endlosschleife erhalten.

 
Liebe Entwickler, bitte weisen Sie auf den Fehler hin.
Обсуждение статьи "Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II)"
Обсуждение статьи "Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II)"
  • 2018.06.10
  • www.mql5.com
Опубликована статья Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II): Автор: Anatoli Kazharski...