Ошибки, баги, вопросы - страница 2641

 

Функция и возвращает значение

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

Это единственный выход из функции. Т.е. единственное место, где она обязана вернуть значение. И компилятор C/C++ со мной согласен. Если всё же в MQL свои стандарты на этот счёт, почему оно нормально собирается, если убрать continue?

 
traveller00:

Функция и возвращает значение

Это единственный выход из функции. Т.е. единственное место, где она обязана вернуть значение. И компилятор C/C++ со мной согласен. Если всё же в MQL свои стандарты на этот счёт, почему оно нормально собирается, если убрать continue?

Компилятор не знает будет-ли обработан цикл и дойдёт-ли выполнение кода до return; Потому и требует подстраховки.

 
Alexey Viktorov:

Компилятор не знает будет-ли обработан цикл и дойдёт-ли выполнение кода до return; Потому и требует подстраховки.

Компилятор C/C++ это прекрасно знает. Компилятор MQL построен на основе одного из компиляторов C/C++, как я понимаю. Но, опять же, даже если логика и своя, почему без continue он знает, а с continue это знание пропадает?

 
traveller00:

Компилятор C/C++ это прекрасно знает. Компилятор MQL построен на основе одного из компиляторов C/C++, как я понимаю. Но, опять же, даже если логика и своя, почему без continue он знает, а с continue это знание пропадает?

Наверное потому, что только человек с первого взгляда на такой код

bool Func()
{
  for(int i=1;;++i)
  {
    if(i==100)
      continue;
    if(i==100)
      return false;
  }
}
не задумываясь может понять что произойдёт. На мой взгляд претензии должны быть к С и С++, а не к MQL. Именно mql защищает от таких случайных косяков.
[Удален]  
traveller00:

Функция и возвращает значение

Это единственный выход из функции. Т.е. единственное место, где она обязана вернуть значение. И компилятор C/C++ со мной согласен. Если всё же в MQL свои стандарты на этот счёт, почему оно нормально собирается, если убрать continue?

Эта Ваша функция - косяк. Если i==100, то уже следующая проверка на то же i==100 не сработает. И получится бесконечный цикл.

[Удален]  
Уважаемые разработчики, обратите пожалуйста внимание на ошибку.
Обсуждение статьи "Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II)"
Обсуждение статьи "Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II)"
  • 2018.06.10
  • www.mql5.com
Опубликована статья Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II): Автор: Anatoli Kazharski...
 
Alexey Viktorov:

Наверное потому, что только человек с первого взгляда на такой код

не задумываясь может понять что произойдёт. На мой взгляд претензии должны быть к С и С++, а не к MQL. Именно mql защищает от таких случайных косяков.

В C/C++ такой ошибки нет.

Сергей Таболин:

Эта Ваша функция - косяк. Если i==100, то уже следующая проверка на то же i==100 не сработает. И получится бесконечный цикл.

Посмотрите внимательнее. В той функции, что я выложил, ошибки нет.

 
traveller00:

В C/C++ такой ошибки нет.

Посмотрите внимательнее. В той функции, что я выложил, ошибки нет.

К чему спор, вам дали ответ. Пользуйтесь

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Vladimir Karputov, 2020.02.11 05:11

Если функция объявлена не как void, то обязана возвращать значение:

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

 

Нужно убрать из шапки партала кошелек и цифры с балансом - это совсем не нужная и малоиспользуемая информация!

У меня теперь в форум можно попасть только через раскрывающееся меня - ужас!

 
Чем возможно автоматом собрать все файлы, что использует mq5? Мне нужно перенести исходник советника. Там десятки файлов инклудятся из разных папок.