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

 
fxsaber #:

Тогда почему не перейти к сути?

Суть - это когда ошибка не только очевидна, но еще и приводит к неправильному результату при выполнении программы

 
A100 #:

Суть - это когда ошибка не только очевидна, но еще и приводит к неправильному результату при выполнении программы

Вижу правильным сначала показать ошибку в простейшем виде, а затем пример возможных последствий.

Не в курсе, почему в C/C++ обязуют между do while иметь тело. Наверное, есть какая-то причина.

 
fxsaber #:

Вижу правильным сначала показать ошибку в простейшем виде, а затем пример возможных последствий.

Не в курсе, почему в C/C++ обязуют между do while иметь тело. Наверное, есть какая-то причина.

А при чем здесь C\C++ ? Это только дополнительный аргумент

Перед написанием кода полезно Основы MQL изучить:

Справочник MQL5\Основы языка\Операторы\Оператор цикла do while 
 

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

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

fxsaber, 2023.05.22 12:35

Вижу правильным сначала показать ошибку в простейшем виде, а затем пример возможных последствий.

Ну показал я ошибку в простейшем виде:
И что? Исправили ее? - Нет - потому что сочли несущественной. И действительно - в таком виде она выглядит как несущественная. Но по сути странно, что на #define перенос действует, а на остальной код - нет. Т.е действуют разные правила для разных частей программы... а зачем такое усложнение?
 
A100 #:

Перед написанием кода полезно Основы MQL изучить

У меня иной подход.

 

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

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

A100, 2023.05.22 09:58

Для тех, кто не понял суть ошибки в предыдущем - еще проще пример:
void OnStart()
{
    do
        while( 0 ) {} //Error: '{' - semicolon expected
    while( 0 );
}

А почему вы считаете компилятор таким умным, что он может читать ваши мысли?

  do
   {
    while(0) {}   //Никаких ошибок
   }
  while(0);
 
Alexey Viktorov #:

А почему вы считаете компилятор таким умным, что он может читать ваши мысли?

Скобки не нужны, если тело состоит из единственной команды.

Ошибка в том, что компилятор создаёт цикл без тела.
 
Alexey Viktorov #:

А почему вы считаете компилятор таким умным, что он может читать ваши мысли?

Задача компилятора не читать мысли, а интерпретировать код строго по синтаксису:

#define While(X)        for(;(X);)
void OnStart()
{
    do
        While( 0 ) {} //нормально
    while( 0 );
}
 
Sergey Gridnev #:
Скобки не нужны, если тело состоит из единственной команды.

Ошибка в том, что компилятор создаёт цикл без тела.

И если нет ни одной команды, то скобки тоже не нужны.

Если в цикле нет тела, то компилятор просто выкинет его и не будет его учитывать.

      do
        while(0);
A100 #:

Задача компилятора не читать мысли, а интерпретировать код строго по синтаксису:

Не надо сочинять…

#define While(X)        for(;(X);)
void OnStart()
{
    do             // Начало цикла.
        While( 0 ) {} //нормально потому, что это просто тело цикла.
    while( 0 ); // Условие завершения цикла.
}
void OnStart()
{
    do                   // Начало цикла
        while( 0 ) {} // Завершение цикла, но написано с ошибкой. Нет ; 
    while( 0 );       // А ЭТО ЧТО??? Видимо новый цикл…
}
 
Alexey Viktorov #:

И если нет ни одной команды, то скобки тоже не нужны.

Если в цикле нет тела, то компилятор просто выкинет его и не будет его учитывать.

Не надо сочинять…

Совет тот же: