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

 
Evgeny Belyaev:

Такая же проблема


Рекурсия?

 
Evgeny Belyaev:

Такая же проблема


IndicatorRelease();

 

Ошибка при компиляции

int  TerminalInfoInteger( 
   int  property_id      // идентификатор свойства 
   );

Необходимо компилировать прикрепленный файл

Где я взял такие "пробелы"? Здесь их много https://www.mql5.com/ru/docs/check/terminalinfointeger. Копировал фрагмент в Microsoft Edge при помощи мыши

Документация по MQL5: Проверка состояния / TerminalInfoInteger
Документация по MQL5: Проверка состояния / TerminalInfoInteger
  • www.mql5.com
Проверка состояния / TerminalInfoInteger - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Файлы:
Error157.mq5  1 kb
 

Запутанная подсветка макросов - не зависит от контекста

//вариант A
#ifdef  MACRO //1
#endif
#define MACRO //2
#ifdef  MACRO //3
#endif
#undef  MACRO //4
#ifdef  MACRO //5
#endif

либо всегда присутствует (вариант B) либо всегда отсутствует (вариант A)

//вариант B
#ifdef  MACRO //1
#endif
#define MACRO //2
#ifdef  MACRO //3
#endif
//#undef  MACRO //4
#ifdef  MACRO //5
#endif
Ожидалось что если макрос в конкретной строке определен - то он подсвечивается, не определен - не подсвечивается. Иначе не понятно что означает наличие\отсутствие подсветки
 

Подсветка С\С++ файлов в MetaEditor

https://www.mql5.com/ru/docs/basis/preprosessor/constant

Макрос __MQL5__  доступен при компиляции файла *.mq5, при компиляции *.mq4 доступен макрос __MQL4__.

Ожидалось что указанные макросы (а также __MQL__) не будут доступны при подсветке файлов с расширениями .c, cpp, .h

//Test.h
#ifndef __MQL__
#define MACRO
#endif
//Test.mq5
#include "Test.h"
#ifdef MACRO //не подсвечивается... нормально
#endif
//Test.cpp
#include "Test.h"
#ifdef MACRO //не подсвечивается... но этот .cpp файл не предназначен для компиляции в MetaEditor,
             //а компилируется в С\С++, где макрос __MQL__ не является предопределенным
             //в результате подсвечивается то что не должно и наоборот не подсвечивается что должно
#endif

Это случай (как и предыдущий) когда неправильная подсветка, вводящая в заблуждение, много хуже, чем ее отсутствие

Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
  • www.mql5.com
Директива #define подставляет expression вместо всех последующих найденных вхождений identifier в исходном тексте. identifier заменяется только в том случае, если он представляет собой отдельный токен. identifier не заменяется, если он является частью комментария, частью строки, или частью другого более длинного идентификатора. expression...
 

Неоднократно встречал на форуме обсуждение пользователей об отсутствие в MetaEditor предопределенного макроса, аналогичного _WIN64. Ответ администрации был, что нет необходимости, поскольку MetaEditor генерирует универсальный одновременно 32-64-х разрядный код.

В то же время многие используют выравнивание https://www.mql5.com/ru/forum/225498/page2#comment_6401835 путем дополнения полей структуры

И действительно, если использовать готовую .dll (которую уже нельзя изменить) то без дополнительного выравнивания не обойтись. Но в x86 и x64 это дополнение может выглядеть по разному, а значит необходимость в аналоге _WIN64 все-таки есть, поскольку структура задается на этапе компиляции .mq5 файла где TerminalInfoInteger( TERMINAL_X64 ) не работает

//Test.mq5
#ifdef _WIN64
#define ALIGN (8-2) //добавить к элементу структуры 6 байт
#else
#define ALING (4-2) //добавить к элементу структуры 2 байта
#endif

Сейчас нужно лишнюю информацию держать в уме. В результате экономии на пустяке есть риск получить трудноуловимую ошибку

Передача структуры в dll C++
Передача структуры в dll C++
  • 2018.01.26
  • www.mql5.com
Пишу dll, которая будет выполнять логику, и собственно возник вопрос. Можно ли передавать в dll структуру данных? Т.е...
 
До сих пор актуально

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

Ошибки, баги, вопросы

fxsaber, 2016.08.25 12:32

Ошибка выполнения в режиме Optimize=1 и/или дебага.

#property strict

class A
{
public:  
  bool operator ==( int ) const { return(true); }
};

void OnStart()
{
  Print((A*)NULL == 0); // Optimize=1 or _DEBUG - invalid pointer access. Optimize=0 and _RELEASE - no problem.
}
 

Ошибка при выполнении

#define MACRO1  "AAA" \
                "BBB"
#define MACRO2  "CCC"
void OnStart()
{
        string text = MACRO1 MACRO2;
        Print( text );
}

Результат:   AAACCCBBB
Ожидалось: AAABBBCCC

 

Ошибка при компиляции

#define MACRO1  "AAA" \
                "BBB"
#define MACRO2  "CCC"
#define MACRO3  "DDD" \
                "EEE"
void OnStart()
{
        string text12 = MACRO1 MACRO2; //нормально
        string text13 = MACRO1 MACRO3; //error:
}                                      //       '}' - semicolon expected
 
A100:

Запутанная подсветка макросов - не зависит от контекста

либо всегда присутствует (вариант B) либо всегда отсутствует (вариант A)

Ожидалось что если макрос в конкретной строке определен - то он подсвечивается, не определен - не подсвечивается. Иначе не понятно что означает наличие\отсутствие подсветки

Это на сайте? Движок на сайте не может распознавать пользовательские макросы в кодах