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

 
Maxim Kuznetsov #:

Но в первом - слева беззнаковый тип, справа отрицательный литерал. Там должна быть ругать матом - там всё сразу несошлось

Просто первое число после нуля. 

void OnStart()
{
  ushort i = -1;
  
  Print(i);
  Print(USHORT_MAX);
}
Удобная конструкция, все пользуются. Стандарт.
 
И какая польза от такого Warning ?
template<typename T>
int f( T t )
{
    if (typename(T) == "string")
        return  -1;
    return t == -1; //Warning: implicit conversion from 'number' to 'string'
}
void OnStart()
{
    f( "" );
}
В прошлых выпусках его не было

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

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

A100, 2023.11.23 20:55

Предлагаю вернуть все как было - только необходимый минимум Warning

 
A100 #:
И какая польза от такого Warning ? В прошлых выпусках его не было

Я не согласен. Предупреждение очень уместное. Имхо.

 
Mikhail Dovbakh #:

Я не согласен. Предупреждение очень уместное. Имхо.

И как оно Вам помогло в данном примере?

 
A100 #:
В последних выпусках появилось много Warning (и с каждым выпуском все новые и новые появляются), которых раньше не было, например:

Но если во (2) случае warning, то и в (1) тоже должен быть

С такой заботой о пользователе код превращается в трудночитаемую кашу

Предлагаю вернуть все как было - только необходимым минимум Warning

void OnStart()
{
   uint i=100500;
   bool wtf=i<-1;
   Print(wtf);
}

Тест на знание стандартов: кто, без запуска кода, скажет что будет выведено и, самое главное, почему?

PS. ~0u==-1. Ты даже не представляешь, сколько реальных и потенциальных багов вокруг этой темы в production реальных проектов)

 
fxsaber #:
Получается, что short-числа работают медленнее int.

Все отличие, что вместо mov будет movsxd. Какая разница в количестве тактов этих инструкций - зависит уже от конкретного камня.

 
Vladimir Simakov #:

Тест на знание стандартов: кто, без запуска кода, скажет что будет выведено и, самое главное, почему?

Скорее всего, результат будет зависеть от компилятора. Кто-то будет делать (uint)(-1), кто-то - (int)(i).

 
Vladimir Simakov #:

PS. ~0u==-1. Ты даже не представляешь, сколько реальных и потенциальных багов вокруг этой темы в production реальных проектов)

Осталось понять, "заботливые" Warning в конечном счете привели к увеличению или уменьшению количества этих багов:

int f() { return -1; }
void OnStart()
{
    if (f() == (uint(-1))) //Warning: expression is always 'false'
        Print( "TRUE"  );
    else
        Print( "FALSE" );
}

Если 

                                      expression is always 'false'

то какой будет результат в этом примере? TRUE или FALSE ?

А теперь проверьте результат в MQL

 
A100 #:

Осталось понять, "заботливые" Warning в конечном счете привели к увеличению или уменьшению количества этих багов:

Если 

то какой будет результат в этом примере? TRUE или FALSE ?

А теперь проверьте результат в MQL

Кривой Warning. А они вообще у всех кривые, иначе их подавления не было бы. А насчет их полезности. Лично я стараюсь, что бы их не было. И да, реальные ляпы, которые в рантайме не разу не явно проявлялись бы они очень часто помогали не допустить)

 
fxsaber #:

Скорее всего, результат будет зависеть от компилятора. Кто-то будет делать (uint)(-1), кто-то - (int)(i).

Да нет, это именно стандарт и все компиляторы обязаны одинаково это делать

Причина обращения: