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

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

а так:

так нужно первый Ваш пример писать - с форвард описанием, кстати форвард-описание для структур и классов тоже работает

int f(int);
int i = f(5);
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return v * v;
}
//+------------------------------------------------------------------+

2020.05.10 17:23:27.704 tst1 (ETHUSD,M1) i = 25

A100:

нормально. А какая разница?

думаю,что синтаксический разбор компилятора сверху вниз и в конце последним будет проанализирована OnStart()
 
Igor Makanu:
думаю,что синтаксический разбор компилятора сверху вниз и в конце последним будет проанализирована OnStart()

В данном случае думать не нужно - правила должны быть общими: если можно применить функцию до объявления, то можно, если нет, то нет. Соответственно оба случая должны либо компилироваться либо нет 

 
A100:

В данном случае думать не нужно - правила должны быть общими: если можно применить функцию до объявления, то можно, если нет, то нет. Соответственно оба случая должны либо компилироваться либо нет 

увы, тут это называется особенности языка, можно так писать

int f(int v)
{
   return v * v;
}
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int i = f(5);
 
Igor Makanu:

увы, тут это называется особенности языка, можно так писать

Все особенности отражаются в Документации. Такой я там не видел. Отсюда вывод: что это не особенность, а недоработка

 
A100:

В данном случае думать не нужно - правила должны быть общими: если можно применить функцию до объявления, то можно, если нет, то нет. Соответственно оба случая должны либо компилироваться либо нет 

Это обычное поведение С подобных языков.

Без форвардной декларации функций их нельзя использовать. Вызов из OnStart по факту компилируется отложенно, по сравнению с прямым вызовом на глобальном уровне.

В С++ точно такую же ошибку выдаст.

 
Renat Fatkhullin:

В С++ точно такую же ошибку выдаст.

В C++ в обоих случаях ошибка, хотя там тоже могли бы сделать отложенную компиляцию, но не сделали, предпочтя простое правило, что функция должна быть объявлена до использования

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.05.07
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

Кроме того в следующем примере

int f( int  ) { return 1; }
void OnStart()
{
        char ch = 0;
        Print( f( ch ) );
}
int f( char ) { return 2; }

Результат в MQL: 2

,             а в C++: 1

Т.е. в MQL последующий код влияет на предыдущий (а в C++ не влияет)
 
A100:

Кроме того в следующем примере

Результат в MQL: 2

,             а в C++: 1

Т.е. в MQL последующий код влияет на предыдущий (а в C++ не влияет)

Улыбнуло)))

 

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

денег 248$ не много, но все-же

 
astroitel:

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

денег 248$ не много, но все-же

Не могли. Если не можете войти, то где вы видите баланс счёта? А вообще отсутствие средств на счёте и тем более их количество не запрещает входить.