Что за ерунда с инкрементам?

 
Код:

double a[4];
int i =0;
double b = a[i++];

Компилятор:

'++' - illegal assignment used

и так с инкрементами везде в обращениях к массиву. Если это фича, то где документация!!!
 

Нашел одно предложение в документации "Операции увеличения/уменьшения значения переменной не могут применяться в выражениях." Нахрена они тогда нужны вообще?
И это называется С - подобный язык. Как писали разработчики в одной из веток "... достаточно знать любой С - подобный язык, чтобы изучить MQL...". Нет слов...

Лирическое отступление. Никогда не мог понять Кулибиных. Зачем изобретать новый язык, когда достаточно разработать нормальный API и использовать любой существующий компилятор (можно обрезанный) со своим фронтэндом. Соображения типа проприетарности, песочницы или защиты от реверсинжиниринга не выдерживают никакой критики. Эрго: или дохрена времени, денег, амбиций, или надо было освоить средства.

 
   double a[4];
   int i =0;
   double b = a[i];
   i++;
 
Да, я уже это понял. К сожалению все хуже:

switch (par[i++])
{
case a1:
  ...
  b = par[i++];
  ...
case a100:
  ...
  c = par[i++];
  ...
}
Простым способом это адекватно не изобразить, особенно при сложных сочетаниях альтернатив case.
 
Честно говоря, не вижу никакой проблемы:
i++;
switch (par[i - 1])
{
 case a1:
  ...
  b = par[i];
  i++;
  ....
 case a100:
  ...
  c = par[i];
  i++;
  ...
}

Приведите более сложное сочетание. А кроме case, ещё и if остались, так что особых проблем нет. А если не нравиться - делайте вычисление в dll на каком Вам нравится компиляторе
 
alexiso:

Нашел одно предложение в документации "Операции увеличения/уменьшения значения переменной не могут применяться в выражениях." Нахрена они тогда нужны вообще?
И это называется С - подобный язык. Как писали разработчики в одной из веток "... достаточно знать любой С - подобный язык, чтобы изучить MQL...". Нет слов...

Лирическое отступление. Никогда не мог понять Кулибиных. Зачем изобретать новый язык, когда достаточно разработать нормальный API и использовать любой существующий компилятор (можно обрезанный) со своим фронтэндом. Соображения типа проприетарности, песочницы или защиты от реверсинжиниринга не выдерживают никакой критики. Эрго: или дохрена времени, денег, амбиций, или надо было освоить средства.


Столько гнева из-за такого обнаруженного отличия MQL от С, которое по вашей же информации было чётко зафиксировано в документации?! Понятие "С-подобный" содержит смысл того, что MQL похож на C, но никак полностью не соответствует ему. Здесь на форуме постоянно обнаруживаются куча других отличий, которые также идут вразрез с языком С. Ну и что? Изначально самим трейдерам, большинство из которых знают о программировании только в общем плане из институтских лабораторных по ИВТ и для которых и разрабатывался сам терминал, абсолютно всё равно что изучать с нуля С или MQL. И там и здесь будут свои проблемы.

Нужно вам API - пожалуйста предлагалось несколько реализаций например вот здесь одно из них https://www.mql5.com/ru/forum/50385
Не нравится API сторонних авторов, пожалуйста, делайте свои dll с незамысловатым вызовом в советнике MT4. Как это сделать есть готовые примеры в самом терминале и здесь на форуме были варианты. В крайнем случае спрашивайте о проблемах - народ наверняка поможет.

В общем все на свете были бы просто счастливы если бы от заработка на Форекс трейдеров отделяла бы только вот такая вот небольшая техническая проблема, как неработоспособность инкрементов в выражениях ;o))) Начнёте реально что-то программировать в МТ4 и поймёте какая это всё мелочёвка, на которую не стоит тратить своё время. Оно вам ещё очень пригодится для понимания массы других проблем, связанных с автоторговлей.
 
alexiso:
Код:

double a[4];
int i =0;
double b = a[i++];

Компилятор:

'++' - illegal assignment used

и так с инкрементами везде в обращениях к массиву. Если это фича, то где документация!!!
Короче, найдете реальную стратегию - поглядим что скажете. А пока умников от программирования было до.. очень много. Ни один не возвращался.
 
To Rosh - фи! Ну захотелось чеку ... а Вы его до.. очень много. Лучше подскажите, ежели не трудно будет: сейчас сформулирую и темку сделаю "Магик" или что-нибудь еще. Полупролемка образовалась с ордерами.
 
А я и правда не понимаю, к чему создавать краткие, но не слишком осмысленные конструкции.

Кажется, в С допустимо такое вот уродство:

if( a = b ) { c = d; } // условие оператора if не имеет логического значения; 
// это не выражение, а оператор!

Не хочется лезть и проверять, но, кажется, такое "логическое условие" будет всегда иметь значение true - независимо от того, равны ли a и b. Согласно логике блюстителей чистоты непонятно чего - MQL4 или С - такая мерзость не должна быть запрещена и в MQL4. Тем не менее такая конструкция вызывает ошибку "=" - illegal assignment used. Когда я впервые увидел это сообщение, я просто отметил про себя, что да, есть отличия от С. Ну и что? Какому трейдеру нужны такие нюансы? По-моему, они только запутают его, и он долго будет искать логическую ошибку (самую трудную), случайно поставив "=" вместо "==".
 
Дык, так язык же ж и называется MQL4,  а не ANSI C99 :) В конце концов, что разработчики придумали, то и используем. Хотя у меня также есть притензии на порядок вычисления логических значений, но я не жалуюсь - понял, как считается и исправил
 
Cgfcb,j!!Форум клево помогает.Исправил себе ошибки.Спасибо!!!
Причина обращения: