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

 
fxsaber:
Почему совсем нет Warnings, что переменная не используется?

Потому что она инициализирована.

 
Alexey Viktorov:

Потому что она инициализирована.

Так а какая разница? Она же инициализирована константой. Даже такой код должен порождать Warning

void OnStart()
{
  int Array[];
  int i;
  
  i = Array[0];
  i = Array[1];
  i = Array[2];
}

Потому что переменная и массив нигде не участвуют.

 
fxsaber:

Так а какая разница? Она же инициализирована константой. Даже такой код должен порождать Warning

Потому что переменная и массив нигде не участвуют.

По-моему такой код вообще не должен компилироваться в связи с тем, что размер массива не задан. Но это просто придирка...

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

Количество переменных с одним именем... сомнительно.

 
Alexey Viktorov:

Откуда компилятору может быть известно о дальнейших ваших планах?

Компилятор выкидывает целые куски иногда, потому что знает

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

Альтернативные реализации стандартных функций/подходов

Renat Fatkhullin, 2016.09.01 23:50

Чтобы компилятор не выкинул цикл из-за его бесполезности, надо воспользоваться результатами вычислений. Например, сделать Print переменной Price.

 
fxsaber:

Компилятор выкидывает целые куски иногда, потому что знает

Ну тогда если Ренату ещё не надоело отвечать, подождём его ответа. А в принципе меня лично всё устраивает.

 
Просьба, если работа в кодобазе обновилась (автор подправил код), то помечать соответствующую ветку обсуждения непрочитанной.
 

Как сделать #uninclude?

// Test.mqh
void Func() {};
#include <Test.mqh>

// Здесь видна Func();

#uninclude <Test.mqh>

// Здесь не видна Func();
 

Исправьте либо значение, либо единицу измерения

2017.09.21 11:37:27.564 Tester  EURUSD: preliminary downloading of history ticks started, it may take quite a long time
2017.09.21 11:37:32.564 Tester  EURUSD: "bases\FIBOGroup-MT5 Server\ticks\EURUSD\201708.tkc" download (836044.77 Kb/sec)
2017.09.21 11:37:41.565 Tester  EURUSD: 45% ticks downloaded (535.34 Kb/sec)
2017.09.21 11:37:49.565 Tester  EURUSD: 53% ticks downloaded (518.17 Kb/sec)
2017.09.21 11:38:01.571 Tester  EURUSD: 61% ticks downloaded (530.69 Kb/sec)
2017.09.21 11:38:12.571 Tester  EURUSD: 70% ticks downloaded (547.64 Kb/sec)
2017.09.21 11:38:26.572 Tester  EURUSD: 82% ticks downloaded (543.88 Kb/sec)
2017.09.21 11:38:38.573 Tester  EURUSD: 94% ticks downloaded (552.07 Kb/sec)
2017.09.21 11:38:50.573 Tester  EURUSD: preliminary downloading of history ticks completed, 44.41 Mb in 1:23.008 (547.80 Kb/sec)
 
fxsaber:

Как сделать #uninclude?

Напрямую нельзя. Поможет рефакторинг кода (иная структура файлов или ООП).

 
в тестере CopyTicks возвращает нули, это нормально?