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

 
Artyom Trishkin #:
Этот момент был достаточно давно. И в справке отображено.

Этот момент появился относительно недавно. Буквально пару месяцев.

Вот на такую конструкцию, компилятор раньше ругался.

   for(int i = 0; i < total; i++)
      for(int i = 0; i < total; i++)
         for(int i = 0; i < total; i++)
           {

           }

А сейчас всё норм.  

Но это не правильно, так как это не норм.


Раньше компилятор на это ругался

int i = 1;
if(true)
   int i = 5;

на это не ругался

if(true)
    int i = 5;
 int i = 1;

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

Стало намного сложнее отслеживать переменные и сто раз перепроверять нет ли с таким же именем переменной объявленной ранее.


В справке действительно написано, но раньше оно так не работало.

 
Nikolai Semko #:

что-то я юмора не понял. 
Так же раньше не было

ошибок и предупреждений не выдает
вывод:

6

8

6

В MT4, теперь, тоже так сделали. Предупреждение есть.

 
Aleksandr Slavskii #:

Этот момент появился относительно недавно. Буквально пару месяцев.

Вот на такую конструкцию, компилятор раньше ругался.

А сейчас всё норм.  

Но это не правильно, так как это не норм.


Раньше компилятор на это ругался

на это не ругался

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

Стало намного сложнее отслеживать переменные и сто раз перепроверять нет ли с таким же именем переменной объявленной ранее.


В справке действительно написано, но раньше оно так не работало.

По-моему лучше избегать применения переменных с одинаковыми именами во избежание подобных казусов.
Конечно в некоторых случаях одинаковые имена полезны, но надежность кода во главе угла.

 
Alexander Sevastyanov #:

Конечно в некоторых случаях одинаковые имена полезны

Есть пример полезности?

 
fxsaber #:

Есть пример полезности?

Вложенные и перевложенные циклы. Имена счетчиков делаю разными. 
 
Valeriy Yastremskiy #:
Вложенные и перевложенные циклы. Имена счетчиков делаю разными. 

У меня сложности с трактовкой написанного. Лучше кодом.

 
fxsaber #:

У меня сложности с трактовкой написанного. Лучше кодом.

int i=0;
for(j=0;j<3;j++) 
{  print(  i+j);
for(g=0;g<5;g++) 
{print( i+g+j) ;}}
i++

С телефона) мне не нравится нововведение. До цикла объявленные переменные видимы в цикле и когда одинаковые имена будет пере назначение. Или тогда внутри цикла видимы только глобальные и внутренние переменные. 
 
fxsaber #:

Интересна причина, почему так сделано в названных языках.

1. Изоляция переменных: Переменные, объявленные внутри блока, остаются видимыми только внутри этого блока, что помогает избегать конфликтов имен и улучшает читаемость кода.

2. Управление памятью: При выходе из блока память, выделенная для локальных переменных, может быть освобождена, что способствует эффективному управлению ресурсами.

3. Легкость отладки: Локальные области видимости упрощают процесс отладки, так как переменные, определенные в одном блоке, не мешают переменным с аналогичными именами в других частях программы.
 

Для OBJ_CHART работают CHART_HEIGHT_IN_PIXELS и CHART_SCALEFIX ?

Есть ли способы управлять положением и размером окон (нужно расположить окна "мозайкой")?

 
Nikolai Semko #:
1. Изоляция переменных: Переменные, объявленные внутри блока, остаются видимыми только внутри этого блока, что помогает избегать конфликтов имен и улучшает читаемость кода.

3. Легкость отладки: Локальные области видимости упрощают процесс отладки, так как переменные, определенные в одном блоке, не мешают переменным с аналогичными именами в других частях программы.

Вы привели странные доводы.

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

Новая версия платформы MetaTrader 5 build 4150: экспорт торгового отчета и новые методы машинного обучения в MQL5

fxsaber, 2024.02.03 16:08

Сегодня долго искал ошибку в схематично таком коде.

void f( double &Res )
{
  if (true)
  {
    double Res = -DBL_MAX;
    
    Res = MathMax(MathRand(), Res);
  }
}

Задумался и написал выделенное. Раньше бы компилятор сразу предупредил, а так потерял много времени, чтобы увидеть (код побольше) эту ерунду.

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