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

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Предложение для MQL
Добавьте возможность программно запросить версию программы
Сейчас можно получить MQL_PROGRAM_NAME Имя запущенной MQL5-программы
Будет хорошо если можно будет запросить и версию программы.
Предложение для MQL
Добавьте возможность программно запросить версию программы
Сейчас можно получить MQL_PROGRAM_NAME Имя запущенной MQL5-программы
Будет хорошо если можно будет запросить и версию программы.
#define VERSION "1.01"
#property version VERSION
void OnStart() {
Print("Version %s",VERSION);
}
#define VERSION "1.01"
#property version VERSION
void OnStart() {
printf("Version %s",VERSION);
}
А ларчик просто открывался)))
Спасибо!
Print(i *= (i = 5)); и Print(j = j * (j = 5))
Ну это выглядит логично, но на всякий случай спросил у deepseek
Print(i *= (i = 5)); и Print(j = j * (j = 5)) идентичны?
Нет, выражения Print(i *= (i = 5)); и Print(j = j * (j = 5)); не идентичны, хотя на первый взгляд могут показаться похожими. Давайте разберем их поведение.
1. Print(i *= (i = 5));
Это выражение можно разбить на следующие шаги:
(i = 5) — переменной i присваивается значение 5.
i = ... — оператор *= умножает текущее значение i на результат выражения в скобках. Поскольку i уже равно 5, это эквивалентно i = i * 5, то есть i = 5 * 5.
В итоге i станет равным 25.
Результат выражения i *= (i = 5) будет 25, и это значение передается в функцию Print.
2. Print(j = j * (j = 5));
Это выражение работает иначе:
(j = 5) — переменной j присваивается значение 5.
j * ... — значение j до выполнения (j = 5) используется в умножении. Если j до этого было неопределено или равно 0, то результат будет 0 * 5 = 0.
Результат выражения j = j * (j = 5) будет 0, и это значение передается в функцию Print.
Ключевые различия:
В первом случае (i *= (i = 5)) сначала выполняется присваивание i = 5, а затем умножение на новое значение i.
Во втором случае (j = j * (j = 5)) значение j до присваивания j = 5 используется в умножении, что может привести к другому результату.
Вывод:
Эти выражения не идентичны и могут давать разные результаты в зависимости от начального значения переменных.
Ну это выглядит логично, но на всякий случай спросил у deepseek
Print(i *= (i = 5)); и Print(j = j * (j = 5)) идентичны?
Нет, выражения Print(i *= (i = 5)); и Print(j = j * (j = 5)); не идентичны, хотя на первый взгляд могут показаться похожими. Давайте разберем их поведение.
1. Print(i *= (i = 5));
Это выражение можно разбить на следующие шаги:
(i = 5) — переменной i присваивается значение 5.
i = ... — оператор *= умножает текущее значение i на результат выражения в скобках. Поскольку i уже равно 5, это эквивалентно i = i * 5, то есть i = 5 * 5.
В итоге i станет равным 25.
Результат выражения i *= (i = 5) будет 25, и это значение передается в функцию Print.
2. Print(j = j * (j = 5));
Это выражение работает иначе:
(j = 5) — переменной j присваивается значение 5.
j * ... — значение j до выполнения (j = 5) используется в умножении. Если j до этого было неопределено или равно 0, то результат будет 0 * 5 = 0.
Результат выражения j = j * (j = 5) будет 0, и это значение передается в функцию Print.
Ключевые различия:
В первом случае (i *= (i = 5)) сначала выполняется присваивание i = 5, а затем умножение на новое значение i.
Во втором случае (j = j * (j = 5)) значение j до присваивания j = 5 используется в умножении, что может привести к другому результату.
Вывод:
Эти выражения не идентичны и могут давать разные результаты в зависимости от начального значения переменных.
Остаются вопросы к приоритетам. Умножение разве приоритетнее расчёта выражения в скобках?
Остаются вопросы к приоритетам. Умножение разве приоритетнее расчёта выражения в скобках?
Ну вот, всё сломали. Сначала мне было всё логично, а теперь не всё и не логично, точнее не совсем всё.
В школе нас учили сначала выполнять действия в скобках. Значит эти два выражения идентичны, в компиляторе ошибка, а ИИ врёт как обычно.
Ха, всё просто, разобрались.
Остаются вопросы к приоритетам. Умножение разве приоритетнее расчёта выражения в скобках?
Приоритет всегда у идентификации переменных.
Ну вот, всё сломали. Сначала мне было всё логично, а теперь не всё и не логично, точнее не совсем всё.
В школе нас учили сначала выполнять действия в скобках. Значит эти два выражения идентичны, в компиляторе ошибка, а ИИ врёт как обычно.
Ха, всё просто, разобрались.
Никто не врёт, а просто идиотское объяснение от искусственного идиота.
(i *= (i = 5)) читаем так: i будет равно — i умноженное на выражение в скобках, а в скобках присвоение значения… То есть, сначала идентификация переменной, а потом действия.
j = j * (j = 5)) читаем так: переменная j уже идентифицирована значением 2. Эту переменную надо умножить на значение в скобках. А в скобках этой переменной присваивается новое значение. Но предыдущее значение не меняется. Вот и все дела…
Приоритет всегда у идентификации переменных.
Никто не врёт, а просто идиотское объяснение от искусственного идиота.
(i *= (i = 5)) читаем так: i будет равно — i умноженное на выражение в скобках, а в скобках присвоение значения… То есть, сначала идентификация переменной, а потом действия.
j = j * (j = 5)) читаем так: переменная j уже идентифицирована значением 2. Эту переменную надо умножить на значение в скобках. А в скобках этой переменной присваивается новое значение. Но предыдущее значение не меняется. Вот и все дела…
Давай исходить из правил.
(i *= (i = 5))
Раз: i = 5;
Два: 5 *= 5 = ??? (25 же)
j = j * (j = 5))
Раз: j = 5;
Два: j = 5 * 5 = ??? (25 же)
Откуда остаётся значение 2, если в первую очередь переменным присваивается значение 5?