Странность в MetaEditor для MT4 (variable already defined после копипаста кода)

 

Добрый день уважаемая публика!

Заметил регулярно встречающийся момент в MetaEditor под MT4 (последний билд 1415 с этим нюансом тоже)

После копипаста большого фрагмента кода, как правило, для конвертации из MQL5 в MQL4 - MetaEditor начинает путаться в областях видимости и ничего не помогает (даже перезапуск и удаление всего остального).

Например, если советник большой и сложный (3к+ строк) - его буквально с нуля переписывать приходится и все за рамки планов выходит и на проект тратится уйма дней(раза в 2+ больше чем планировалось).

Нужна информация как избегать той ситуации :)

Пример:




Проекты позволяют создавать прибыльных торговых роботов! Но это не точно
Проекты позволяют создавать прибыльных торговых роботов! Но это не точно
  • www.mql5.com
Большая программа начинается с маленького файла, который затем начинает расти в размерах, наполняться множеством функций и объектов. Большинство разработчиков роботов справляется с этой проблемой с помощью включаемых файлов. Но лучше сразу же начинать писать любую программу для трейдинга в проекте — это выгодно во всех отношениях.
 
Igor Zakharev:

Добрый день уважаемая публика!

Заметил регулярно встречающийся момент в MetaEditor под MT4 (последний билд 1415 с этим нюансом тоже)

После копипаста большого фрагмента кода, как правило, для конвертации из MQL5 в MQL4 - MetaEditor начинает путаться в областях видимости и ничего не помогает (даже перезапуск и удаление всего остального).

Например, если советник большой и сложный (3к+ строк) - его буквально с нуля переписывать приходится и все за рамки планов выходит и на проект тратится уйма дней(раза в 2+ больше чем планировалось).

Нужна информация как избегать той ситуации :)

Пример:




#property strict
 
Artyom Trishkin #:
#property strict
ага, с проперти надо будет другие косяки править типа аррай аут оф рендж, зеро дивайд (наверно), если память мне не изменяет то без проперти стрикт будет упрощённый режим компиляции и некоторые критические ошибки будут игнорироваться при исполнении кода, точный список ошибок которые игнорируются без проперти я и сам уже не помню, но выход за пределы массива не будет критом без строгого режима компиляции (проперти стрикт)
 
Artyom Trishkin #:
#property strict

Спасибо, да, это актуально 👍

По новому компилятору, этому проперти и т.д. - давно не перечитывал.

Думаю и другим юзерам будет полезно освежить знания и память.


 
Igor Zakharev #:

Спасибо, да, это актуально 👍

По новому компилятору, этому проперти и т.д. - давно не перечитывал.

Думаю и другим юзерам будет полезно освежить знания и память.


Можно было перед обоими циклами объявить переменную i и не париться. Всё равно в заголовке цикла она инициализируется значением.

int OnInit(){
        int i;
        for(i=0;i<=5;i++){
                
        }
        for(i=0;i<=10;i++){
                
        }
        return(INIT_SUCCEEDED);
}
Причина обращения: