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

 

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

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

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 #:

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

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

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

Совет тот же:

 
A100 #:

Совет тот же:


Только после вас… Изучите эту часть документации…

 
Alexey Viktorov #:

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



Посмотрите на синтаксис оператора цикла do ... while()

Тело там обязательно!
Оно может быть пустым:
do {} while(...)
но оно не может отсутствовать.
 
Sergey Gridnev #:

Посмотрите на синтаксис оператора цикла do ... while()

И???

do
   оператор;
while(выражение);
Причина обращения: