Странная MQL конструкция компилируется

 

Дословно код в эксперте:

      // период усреднения
      int AverageBars = 3;
 
      // get indicators values
      double dValue1 = getAverageCustomIndicator(int AverageBars, period1, sIndName1, iInd1, 0); 
      double dValue2 = getAverageCustomIndicator(int AverageBars, period2, sIndName2, iInd2, 0);

Забыл слово int убрать при вызове, когда прототип функции копировал в clipboard. Нажал F5 - скомпилировалось..

 
Вот такой код уже выдает ошибки:
     int AverageBars = 3;
 
      // get indicators values
      double dValue1 = getAverageCustomIndicator(int AverageBars, int period1, int sIndName1, int iInd1, 0); 
      double dValue2 = getAverageCustomIndicator(int AverageBars, int period2, int sIndName2, int iInd2, 0);
Может это нововведение: быстрый конверт типов!?
 

Речь не о конвертации (передаётся переменная того же типа, что и в объявлении функции), а о том, что при вызове должен передаваться только список реальных параметров, описание их типа здесь неуместно.
Это синтаксическая ошибка, проаущенная компилятором.

На всякий случай прототип функции:

double getAverageCustomIndicator(int AverageBars, int period, string sIndName, int indicatorIndex, int shift)
{
   //---- усреднение значения за N (AverageBars) баров //
}
 
chv:


Это синтаксическая ошибка, проаущенная компилятором.


Полагаете? Мне в таких случаях вспоминается:

Кен Томпсон признал следующее - затем Деннис и Брайан разработали по-настоящему извращенный диалект Паскаля, назвав его "A". Когда мы обнаружили, что другие действительно пытаются писать программы на A, мы быстро добавили еще парочку хитрых примочек, создав B, BCPL, и, наконец, Си. Мы остановились, добившись успешной компиляции следующего:

for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

:)

 
Vita:
chv:


Это синтаксическая ошибка, проаущенная компилятором.


Полагаете? Мне в таких случаях вспоминается:

Кен Томпсон признал следующее - затем Деннис и Брайан разработали по-настоящему извращенный диалект Паскаля, назвав его "A". Когда мы обнаружили, что другие действительно пытаются писать программы на A, мы быстро добавили еще парочку хитрых примочек, создав B, BCPL, и, наконец, Си. Мы остановились, добившись успешной компиляции следующего:

for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

:)


Хороший юмор, на эту конструкцию похожи записи на языке Perl, если закрутить их ещё на порядок запутаннее. Однако, мне кажется, язык MQL4 такой конструкции по замыслу его авторов не предусматривал. Поэтому я вынес вопрос на форум, чтобы разработчики обратили на него внимание. Если это важно, примут к сведению, если нет - на нет и суда нет.
 
chv:
Хороший юмор, на эту конструкцию похожи записи на языке Perl, если закрутить их ещё на порядок запутаннее. Однако, мне кажется, язык MQL4 такой конструкции по замыслу его авторов не предусматривал. Поэтому я вынес вопрос на форум, чтобы разработчики обратили на него внимание. Если это важно, примут к сведению, если нет - на нет и суда нет.


Это очень важно. Порой, даже когда компилятор указывает на ошибку, её достаточно трудно обнаружить. Но когда он не указывает на ошибку, пусть пока ни к чему не приводящую, то начинается процесс, котрый я для себя называю "закат солнца вручную".

Как к человеку ответственному, у меня к вам вопрос, бывает ли у вас такое:

1. Редактор при "заменить всё" подвисает намертво, когда предстоит замена в тексте комментария?

2. Компилятор неверно указывает строку с ошибкой, при наличии кода типа:

string s[8]={"Текст","Текст",
                     "Текст","Текст",
                     "Текст","Текст",
                     "Текст","Текст",
                    };

и неверное смещение равно количеству строк, которое занимают строчки, содержащие "Текст"?

 

Для таких сложных вопросов есть специальный раздел за пределами MQL форума - вам туда. Найдите там адекватного вашему уровню собеседника.

 
chv:

Для таких сложных вопросов есть специальный раздел за пределами MQL форума - вам туда. Найдите там адекватного вашему уровню собеседника.


Простите великодушно.
 
Vita:

1. Редактор при "заменить всё" подвисает намертво, когда предстоит замена в тексте комментария?

2. Компилятор неверно указывает строку с ошибкой, при наличии кода типа:

string s[8]={"Текст","Текст",
                     "Текст","Текст",
                     "Текст","Текст",
                     "Текст","Текст",
                    };

и неверное смещение равно количеству строк, которое занимают строчки, содержащие "Текст"?


Это давно известные, скажем так, "особенности", редактора и компилятора.

1. Редактор иногда промахивается при поиске. То есть, если искать "и" в предыдущей строке при отмеченном свойстве "слово целиком", редактор может выделить символ, смещенный относительно искомого союза на один-два символа влево. Я подозреваю, что смещение зависит от количества искомых паттернов с начала строки. Перед заменой происходит дополнительная проверка, слово не меняется, и происходит переход к следующей строке с найденным словом, где история повторяется, что приводит к зацикливанию в случае замены всех найденных одним нажатием.
https://www.mql5.com/ru/forum/51680

2. Да, похоже счетчик компилятора пропускает строки внутри скобок при инициализации - https://www.mql5.com/ru/forum/49620
 
Irtron:
Vita:

1. Редактор при "заменить всё" подвисает намертво, когда предстоит замена в тексте комментария?

2. Компилятор неверно указывает строку с ошибкой, при наличии кода типа:

string s[8]={"Текст","Текст",
                     "Текст","Текст",
                     "Текст","Текст",
                     "Текст","Текст",
                    };

и неверное смещение равно количеству строк, которое занимают строчки, содержащие "Текст"?


Это давно известные, скажем так, "особенности", редактора и компилятора.

1. Редактор иногда промахивается при поиске. То есть, если искать "и" в предыдущей строке при отмеченном свойстве "слово целиком", редактор может выделить символ, смещенный относительно искомого союза на один-два символа влево. Я подозреваю, что смещение зависит от количества искомых паттернов с начала строки. Перед заменой происходит дополнительная проверка, слово не меняется, и происходит переход к следующей строке с найденным словом, где история повторяется, что приводит к зацикливанию в случае замены всех найденных одним нажатием.
https://www.mql5.com/ru/forum/51680

2. Да, похоже счетчик компилятора пропускает строки внутри скобок при инициализации - https://www.mql5.com/ru/forum/49620


Спасибо, успокоили мою душу.
Не особо серьезные ошибки, конечно, но всё равно жаль, что до сих пор они причиняют неудобство.

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