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.
SK. писал (а):
Переменная bool представлена в памяти машины как целочисленная.
В компиляторе она представлена как bool.Переменная bool представлена в памяти машины как целочисленная.
Не надо ничего преобразовывать.
Можно не преобразовывать и продолжать получать предупреждение.
Можно избавиться от предупреждения, используя подходящие типы для условного оператора и перечисляемой при оптимизации переменной.
Если я правильно Вас понял, Вы считаете, что при компиляции этой
программы должны возникнуть предупреждения:
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж int start() { bool B = true; int I; //... I = B; Alert(I); return; } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
Но никаких предупреждений не возникает.
Или я не правильно вас понял..
SK. писал (а):
Если я правильно Вас понял, Вы считаете, что при компиляции этой программы должны возникнуть предупреждения:
Неправильно, не считаю, не должны.Если я правильно Вас понял, Вы считаете, что при компиляции этой программы должны возникнуть предупреждения:
SK. писал (а):
Просто обратите внимание на исходный пост темы, пожалуйста.
Или я не правильно вас понял..
Интересен такой код:
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?
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 выражение вида:
С одной стороны зря предупреждение (это именно предупреждение,
а не ошибка) выдается, При смене типа переменной (для примера имя MyVariable) с bool на int выражение вида:
а с другой дополнительная защита от неправильного использования.
Например, я себе никогда не позволяю писать if(var) ... , если var не является чистым bool.
Береженого бог бережет.
chv писал (а):
Интересен такой код:Как bool может хранить число 1048576, с трудом представляю. Оно внутри хранится как int?
Вы интересный глюк нашли - будем исправлять. Интересен такой код:Как bool может хранить число 1048576, с трудом представляю. Оно внутри хранится как int?
Спасибо!
Хорошо, рад помочь.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
При смене типа переменной (для примера имя MyVariable) с bool на int выражение вида:
вызывает предупреждение о конвертации типов данных. Вопрос - как bool приводится к int, какими значениями? Если следовать правилам C, то (int)0 суть есть == (bool)false, а любое int-значение, отличное от нуля, суть есть true.
Верно ли это для MQL4 и указанных выше преобразований?
P.S:
я делаю копию эксперта для оптимизатора со сменой bool на int, и мне либо делать пару-тройку сотен явных замен в коде вида:
либо, что _значительно_ проще, оставить код сравнений как есть.