#property strict в MQL4. - страница 2

 
Valeriy Yastremskiy:
При компиляции явные выходы могут быть замечены и вынесены в предупреждения, не явные не будут замечены компилятором, только по исполнению будет ошибка 
нет - в том то и прикол что не будет ошибки при обращении к несуществующей ячейке массива выдаст 0 и не выдаст ошибку, вот такая вот халява без #property strict, на ноль делить не пробовал, но с массивом это точно работает
 
Aleksey Semenov:
нет - в том то и прикол что не будет ошибки при обращении к несуществующей ячейке массива выдаст 0 и не выдаст ошибку, вот такая вот халява без #property strict, на ноль делить не пробовал, но с массивом это точно работает
Компиляция это не работа программы. Я про статические массивы. У них можно посчитать выход за пределы при компиляции. И то не всегда.
 

Vasya Vasya:

И где полные отличия обновленной версии и старой или можно взять все из   MQL5 ?

Полные отличия в MetaEditor --> Справка --> Справочник MQ4

 
Vasya Vasya:

можноли обойтись без  #property strict для добавления коментариев? 

Добавьте перед параметром фиктивную строковую переменную с текстом комментария
input string D2=" Время торговли ";
 
Vasya Vasya:

И все таки  для меня  остался неясным один важный вопрос.

Какой синтаксис при включеном  #property strict

используется конструкции из MQL5 или MQL4 ?

На все вопросы можно получить ответы с большей пользой.

Заведите скрипт с именем, например, Проба. Все вопросы проверяйте в нем. Быстрее и надежнее.

 

Старые программы надо сильно править. Вот пример: простой скрипт. По сути A * B + C

//+------------------------------------------------------------------+
//| Пробный скрипт                                         Проба.mq4 |
//+------------------------------------------------------------------+
bool A=false,B=false,C=true;
//+------------------------------------------------------------------+
//| Функция OnStart выполнится, когда бросим скрипт на график        |
//+------------------------------------------------------------------+
void OnStart()
{
   Alert(A,"   ",B,"   ",C,"   ",A&&B||C );
   Alert("A        B        C    A&&B||C"   );
}
На билде 2013 года дает такой результат

На последнем билде результат другой, т.к. изменен приоритет операций дизъюнкции (логического сложения) и конъюнкции (логического умножения)

Если добавить #property strict то результат другой, но похож на предыдущий


При перекомпилировании старых программ и появлении предупреждения check operator precedence ...

следует указать порядок вычисления с помощью скобок

 
Konstantin Erin:

Старые программы надо сильно править. Вот пример: простой скрипт. По сути A * B + C

На билде 2013 года дает такой результат

На последнем билде результат другой, т.к. изменен приоритет операций дизъюнкции (логического сложения) и конъюнкции (логического умножения)

Если добавить #property strict то результат другой, но похож на предыдущий


При перекомпилировании старых программ и появлении предупреждения check operator precedence ...

следует указать порядок вычисления с помощью скобок

удивлен даже, приоритеры И и ИЛИ менять. И зачем. Типа в почти всех языках по другому и это надо запомнить. Недавно с языком знаком. Не застал такого безобразия.

 
Valeriy Yastremskiy:

удивлен даже, приоритеры И и ИЛИ менять. И зачем. Типа в почти всех языках по другому и это надо запомнить. Недавно с языком знаком. Не застал такого безобразия.

Разработчики языка MQL-2 заложили приоритет дизъюнкции (логического сложения || )  выше приоритета конъюнкции (логического умножения &&) . Это перешло в языки MQL-3 и MQL-4. При разработке MQL-5 это где-то 2015 год положение решили исправить - теперь приоритет умножения как и у всех выше приоритета сложения. И заодно исправили в языке MQL-4. Но к тому времени по старым правилам написано множество программ, которые перестали работать. Для восстановления работоспособности их надо перекомпилировать, указав скобками нужный порядок выполнения сложных логических выражений. Для облегчения этой работы компилятор в подозрительных местах выдает предупреждения check operator precedence ... = проверьте последовательность выполнения операций: используйте скобки для уточнения. Это предупреждение выдается и в новых программах. Пример: A&&B||C

  в строке 11: A&&B||C

//+------------------------------------------------------------------+
//| Пробный скрипт                                         Проба.mq4 |
//+------------------------------------------------------------------+
#property strict
bool A=false,B=false,C=true;
//+------------------------------------------------------------------+
//| Функция OnStart выполнится, когда бросим скрипт на график        |
//+------------------------------------------------------------------+
void OnStart()
{
   Alert(A,"   ",B,"   ",C,"   ",A&&B||C );
   Alert("A        B        C    A&&B||C"   );
}

Известен анекдот, где российский хирург удалил гланды через задний проход. Однако такой подход разработчики используют часто.

Разработчик первого процессора IBM попутал верх и низ в адресации памяти. И до сих пор программистам приходится переворачивать байты при непосредственной работе с памятью на языках низкого уровня.

В компьютерах IBM отсутствовала кириллица. И когда в СССР появились компьютеры, амеры удружили нам русскую раскладку, перевернув заодно и часть латиницы. В результате программистам (и мне в том числе) пришлось создавать программы перекодировки текстовых файлов.

 
Konstantin Erin:

Разработчики языка MQL-2 заложили приоритет дизъюнкции (логического сложения || )  выше приоритета конъюнкции (логического умножения &&) . Это перешло в языки MQL-3 и MQL-4. При разработке MQL-5 это где-то 2015 год положение решили исправить - теперь приоритет умножения как и у всех выше приоритета сложения. И заодно исправили в языке MQL-4. Но к тому времени по старым правилам написано множество программ, которые перестали работать. Для восстановления работоспособности их надо перекомпилировать, указав скобками нужный порядок выполнения сложных логических выражений. Для облегчения этой работы компилятор в подозрительных местах выдает предупреждения check operator precedence ... = проверьте последовательность выполнения операций: используйте скобки для уточнения. Это предупреждение выдается и в новых программах. Пример: A&&B||C

  в строке 11: A&&B||C

Известен анекдот, где российский хирург удалил гланды через задний проход. Однако такой подход разработчики используют часто.

Разработчик первого процессора IBM попутал верх и низ в адресации памяти. И до сих пор программистам приходится переворачивать байты при непосредственной работе с памятью на языках низкого уровня.

В компьютерах IBM отсутствовала кириллица. И когда в СССР появились компьютеры, амеры удружили нам русскую раскладку, перевернув заодно и часть латиницы. В результате программистам (и мне в том числе) пришлось создавать программы перекодировки текстовых файлов.

Часто большая задача решается не по плану, а по мере поступления мелких задач и иногда это единственный путь первого решения. я понял что произошло с приоритетами, удивила  мотивация постановщика задач, если он был, или это просто перепутали, хотя не верится)

Причина обращения: