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

 
Для тех, кто не понял суть ошибки в предыдущем - еще проще пример:
void OnStart()
{
    do
        while( 0 ) {} //Error: '{' - semicolon expected
    while( 0 );
}
 
A100 #:
Ошибка при выполнении:
Результат:    1:3
Ожидалось:  2:2
Очевидно, MQL связал первый while с предшествующим do.
Очень странное поведение компилятора.
 
A100 #:
Для тех, кто не понял суть ошибки в предыдущем - еще проще пример:
Да уж.
 
A100 #:

Да?! А почему тогда в C\С++ другой результат? Уже простейший пример не можете разобрать.

Какой-то эмоциональный высер.


Вы это:

void OnStart()
{
  do
  while(0);
  
  while(0);
}


Приравниваете к этому:

void OnStart()
{
  do
  {
    while(0);
  }  
  while(0);
}


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

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

A100, 2023.05.22 09:58

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

Здесь ошибка. С предыдущим связь спорна.


ЗЫ На тему макросов вспомнился хороший комментарий.

Forum on trading, automated trading systems and testing trading strategies

Libraries: Benchmark

amrali, 2023.04.24 17:50

Using do{} while loop allows you to treat a function-like macro that has many lines as a single statement which can be terminated by semicolon. Using brackets only gives logical errors if inside nested if/else or switch() case constructs. 

If using brackets alone, you should be aware of the errors due to semicolons.

See https://stackoverflow.com/questions/154136/why-use-apparently-meaningless-do-while-and-if-else-statements-in-macros

 
Саб, надо успокоиться, мы все любим тебя и надо чтобы так и оставалось
 
fxsaber #:


Вы это:


Приравниваете к этому:



Конструкция цикла do while подразумевает наличие тела. 
 
Sergey Gridnev #:
Конструкция цикла do while подразумевает наличие тела. 

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

void OnStart()
{
  do
  while(0); // Компилируется, когда не должен.    
}
 
fxsaber #:

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

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

 
A100 #:

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

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

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

 
fxsaber #:

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

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

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

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

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