Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 75

 
Почему предупреждение только в одном месте?
void OnStart()
{
  int a = 0;
    
  if (a == 0)
    ; // OK
  else if (a == 1)
    ; // OK
  else if (a == 2)
    ; // empty controlled statement found
};
 
fxsaber:
Почему предупреждение только в одном месте?
Потому что предупреждение только в тех местах, где ; лишена явного смысла
 
Компилятор MT4 умнее пятерки?
#property strict

void OnStart()
{
   int r = 0;
   int g = 0;
   int b = 0;
   
   // from MT5: Canvas.mqh
   uint Pixel = (r<<16|g<<8|b<<0|255<<24) &0xffffffff; //check operator precedence for possible error; use parentheses to clarify precedence
}


MT5 ничего не сообщает.

 
A100:
Потому что предупреждение только в тех местах, где ; лишена явного смысла

Представим, что вместо нее был Print("");

его закомментировать понадобилось, поэтому пришлось прописать пустую ;. Так что смысл имеется.

 
fxsaber:

Представим, что вместо нее был Print("");

его закомментировать понадобилось, поэтому пришлось прописать пустую ;. Так что смысл имеется.

Это не явный смысл, а скрытый - компилятор не знает что, кому и зачем понадобилось.

 
fxsaber:
Компилятор MT4 умнее пятерки?


MT5 ничего не сообщает.

А зачем лишние сообщения? когда есть Приоритеты и порядок операций

 
A100:

А зачем лишние сообщения? когда есть Приоритеты и порядок операций

Это совсем не лишние сообщения. Приоритеты есть всегда

bool a = r && g || b; // check operator precedence for possible error; use parentheses to clarify precedence

Компилятор уже и пятерки предупреждает о возможной ошибке.

 
A100:

Это не явный смысл, а скрытый - компилятор не знает что, кому и зачем понадобилось.

Логику понял, спасибо.

 
fxsaber:

Это совсем не лишние сообщения. Приоритеты есть всегда

Компилятор уже и пятерки предупреждает о возможной ошибке.

Ну тогда и здесь нужно предупредить

        int x = 5 + 3 * 6; //нет предупреждения

А то вдруг люди неграмотные не знают что сначала умножение

 
A100:

Ну тогда и здесь нужно предупредить

А то вдруг люди неграмотные не знают что сначала умножение

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

Сложение с умножением имеет низкую вероятность, поэтому не предупреждается.


По-вашему, и здесь не нужно делать предупреждений

int d = 1.4; // truncation of constant value
d *= 1.5; // possible loss of data due to type conversion


ЗЫ Просьба к разработчикам привести реакции MT4 и MT5 компиляторов к единому знаменателю.