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

 

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

#define MACRO1( X, Y )  X/**/##Y
#define MACRO2( X, Y )  X##/**/Y
void f5() {}
void OnStart()
{
        MACRO1( f, 5 )(); //нормально
        MACRO2( f, 5 )(); //error: 'f/' - undeclared identifier
}
 
A100:

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

Запретил бы и MACRO1.

 
fxsaber:

Запретил бы и MACRO1.

На основании чего? Только потому что вам так захотелось?

Есть общее правило: комментарии могут быть в любой части программы. Если вы комментариями не пользуетесь - это не значит что другие не пользуются

 
A100:

На основании чего? Только потому что вам так захотелось?

Есть общее правило: комментарии могут быть в любой части программы. Если вы комментариями не пользуетесь - это не значит что другие не пользуются

Потому что это такой же изврат, как это

#define MACRO(A,B)  A## \
                      B

void OnStart()
{
  int j2;
  int i = MACRO(j,2);
}


Кстати, баг похоже

#define MACRO(A,B)  A##B

void OnStart()
{
  int i = MACRO(1,2); // '12' - undeclared identifier
}
 
fxsaber:

Потому что это такой же изврат, как это

Кстати, баг похоже

Нет реальных аргументов - так и скажите. В вашем представлении это не может быть багом потому что так писать нельзя - это все равно что заменить в примере выше комментарии /**/ пробелами

#define MACRO2( X, Y )  X## Y
 
A100:

Нет весомых аргументов - так и скажите. В вашем представлении это не может быть багом

void OnStart()
{
  int j2;
  int i = j/**/2;
}

А макрос почему в этом месте не должен вызывать ошибку? Только не надо в качестве аргумента приводить С++, где за других кто-то подумал.

 
fxsaber:

А макрос почему в этом месте не должен вызывать ошибку?

Потому что записи

#define MACRO( X, Y )   X/**/##/**/Y
#define MACRO( X, Y )   X    ##    Y

эквивалентны записи

#define MACRO( X, Y )       X##Y
Для меня это из разряда: "и ежу понятно" (комментарии и незначащие пробелы пропускаются, а комментарий /**/ эквивалентен пробелу). Может быть кто-то даст научное объяснение
 
A100:

Для меня это из разряда: "и ежу понятно" (комментарии и незначащие пробелы пропускаются, а комментарий /**/ эквивалентен пробелу). Может быть кто-то даст научное объяснение

Это объясняет.

 

Не пойму почему эту проблему все игнорят??!!!

написал код - чтобы все убедились что есть баг.

#include <Trade\Trade.mqh>

CTrade trade;

bool test = false;
void OnTick(){
     if(!test){
         double bid = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits);
         trade.Sell(0.1,NULL,bid,1.0777,0);
         test = true;
     }
}

создаем эксперта на MQL5. Ставим дату тестирования по EURUSD от 2017.04.21 по 2017.04.25 тест по OHLC минуты. График для теста взял H1.

https://charts.mql5.com/16/419/eurusd-i-h1-alpari-international-limited-kakogo-figa.png

И как быть? Где я натупил? По идее такого же быть не должно! По ценам открытия то самое, хотя не должно так быть.

Тест по всем тикам работает правильно. Но оптимизацию по всем тикам проводить нереально

Для нагладности график как должно быть

https://www.mql5.com/ru/charts/7751509/eurusd-i-h1-alpari-international-limited-kak-pravilno

 
Anton Ohmat:

Не пойму почему эту проблему все игнорят??!!!

Потому что бессмысленно реагировать. Вот Вы считаете так, а разработчики по другому.