это баг компилятора или фича???

 

Совершенно случайно увидел у себя в коде косяк, но при этом все работало корректно.

Но сам факт удивил... :-)

#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

double Test;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 if(Test==false)
  {
   Test=true;
  }  
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
St0nE:

Совершенно случайно увидел у себя в коде косяк, но при этом все работало корректно.

Но сам факт удивил... :-)

#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

double Test;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 if(Test==false)
  {
   Test=true;
  }  
//----
   return(0);
  }
//+------------------------------------------------------------------+

а можно для старослужащих?

в чём баг? Фича?

в чём полезность или непредсказуемость компилятора Вы узрели?

Или как в зеркале - видим зерцало и юношей которых уже нет?

;))

 

Не баг и не фича. Как я понимаю, сработало условие double Test==false.

Так и должно быть,- в чем вопрос-то?

 

Видимо вызвал удивление факт корректной работы кода, когда с переменной double работают как с bool.

Так тут все просто. true=1.0 false=0.0

Просто несколько нерационально и все...

 
AlexeyFX:

Видимо вызвал удивление факт корректной работы кода, когда с переменной double работают как с bool.

Так тут все просто. true=1.0 false=0.0

Просто несколько нерационально и все...

Неужто булевы переменные представлены в форме double? Я был уверен, что в int :)
 

да да, я удивился, что с даблом можно работать как с булеан...

Как для меня, это несколько диковато, видимо я один такой.. :-)

 

есть правила преобразования.

их хорошо помнит компилятор. он так заточен.

и ДОЛЖЕН помнить кодер!

 
Я полагал, что true и false это константы, поэтому по барабану какому типу переменной присваивать значение - всё преобразуется.
 
valenok2003:
Я полагал, что true и false это константы, поэтому по барабану какому типу переменной присваивать значение - всё преобразуется.


Вооот, кстати, да. Грамотный ответ - я как - то не мог найти решения... все думал... :-)

Вообще - как меня учили в Политехе, изначально: true=есть (подаем) напряжение на плате(-у) (1), false=нет напряжения на плате (0). А эти числа 0 и 1 входят в множество как Интеджер, так и дабл, как - то так.

 

М-дя. Разобрались? Ну, теперь ничто не мешает. Грааль!

===

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

 
Svinozavr:

Слушайте, а вот что движет авторами, создающими такие ветки?

Куча свободного времени. Как пить дать.
Причина обращения: