Преобразование bool к int - значения

 
Уважаемые разработчики MT4.

При смене типа переменной (для примера имя MyVariable) с bool на int выражение вида:
if (MyVariable)
{
	// some actions
}
вызывает предупреждение о конвертации типов данных. Вопрос - как bool приводится к int, какими значениями? Если следовать правилам C, то (int)0 суть есть == (bool)false, а любое int-значение, отличное от нуля, суть есть true.
Верно ли это для MQL4 и указанных выше преобразований?

P.S:
я делаю копию эксперта для оптимизатора со сменой bool на int, и мне либо делать пару-тройку сотен явных замен в коде вида:
if (MyVariable != 0)
{
 	// some ...
}
либо, что _значительно_ проще, оставить код сравнений как есть.
 
chv:
либо, что _значительно_ проще, оставить код сравнений как есть.

extern bool MyVariable;
extern int MyVariableCnt; // for optimisation
 
int init()
{
    if (isOptimization())
        MyVariable = (MyVariableCnt != 0);
}
 
int start()
{
    ...
 
    if (MyVariable) // as before
        doSomethingSensible(); 
    ...
 
    return (0);
}
 
if (MyBoolVariable) MyIntVariable=1
else MyIntVariable=0;
наоборот:

if (MyIntVariable!=0) MyBoolVariable=true
else MyBoolVariable=false



так гарантированно не будут проблемы
 
Переменная bool представлена в памяти машины как целочисленная.
Не надо ничего преобразовывать.

bool B = true;
int  I;
...
I = B;

В результате переменная I получит целое значение 1.

Но для практических расчётов можно не делать и этого. Зачастую можно просто использовать непосредственно переменную В в тех местах, где по смыслу предполагалось использовать I.

https://docs.mql4.com/ru/basis/types/casting

 
SK. писал (а):
Переменная bool представлена в памяти машины как целочисленная.
В компиляторе она представлена как bool.

Не надо ничего преобразовывать.
Можно не преобразовывать и продолжать получать предупреждение.

Можно избавиться от предупреждения, используя подходящие типы для условного оператора и перечисляемой при оптимизации переменной.
 
Если я правильно Вас понял, Вы считаете, что при компиляции этой программы должны возникнуть предупреждения:
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int start()
   {
   bool B = true;
   int  I;
   //...
   I = B;
   Alert(I);
   return;
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж

Но никаких предупреждений не возникает.
Или я не правильно вас понял..

 
SK. писал (а):
Если я правильно Вас понял, Вы считаете, что при компиляции этой программы должны возникнуть предупреждения:
Неправильно, не считаю, не должны.
SK. писал (а):

Или я не правильно вас понял..

Просто обратите внимание на исходный пост темы, пожалуйста.
 
Интересен такой код:
static bool BBB = true;
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if (BBB)
   {
      BBB = false;
      
      bool b;
      int i;
      
      b = true;
      i = b;
      Print("b = ", b, ", i = ", i);
   
      b = false;
      i = b;
      Print("b = ", b, ", i = ", i);
      
      i = 3;
      b = i;
      Print("b = ", b, ", i = ", i);
 
      i = 1048576;
      b = i;
      Print("b = ", b, ", i = ", i);
      
      if (b)
         Print("YES");
      else
         Print("NO");
   }
   
   return (0);
 
//...
}
И его результаты:
2006.11.10 00:36:17 2006.09.01 00:00 exp GBPUSD,H1: YES
2006.11.10 00:36:17 2006.09.01 00:00 exp GBPUSD,H1: b = 1048576, i = 1048576
2006.11.10 00:36:17 2006.09.01 00:00 exp GBPUSD,H1: b = 3, i = 3
2006.11.10 00:36:17 2006.09.01 00:00 exp GBPUSD,H1: b = 0, i = 0
2006.11.10 00:36:17 2006.09.01 00:00 exp GBPUSD,H1: b = 1, i = 1

Как bool может хранить число 1048576, с трудом представляю. Оно внутри хранится как int?
 
chv:

При смене типа переменной (для примера имя MyVariable) с bool на int выражение вида:

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

Например, я себе никогда не позволяю писать if(var) ... , если var не является чистым bool.
Береженого бог бережет.
 
chv писал (а):

Интересен такой код:Как bool может хранить число 1048576, с трудом представляю. Оно внутри хранится как int?
Вы интересный глюк нашли - будем исправлять.
Спасибо!
 

Хорошо, рад помочь.

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