Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Правильный программист игнорирует недокументированные возможности. Ибо, они могут в любой момент измениться. Ранее работавший код перестанет работать.
return только завершает работу функции, но никакого значения функции не передаёт. И то что вы думаете, что вернуть может в функцию что угодно, это только кажется, так как в функции внутри старта может оставаться ранее переданное ей значение, если кроме оператора return в ней используется оператор return(x), который ранее ей передал результаты каких нибудь вычислений.
В связи с результатами нового теста это пост следует откорректировать. Правильно будет так:
return только завершает работу функции, но никакого значения функции не передаёт. Значение функции временно хранится в буфере, который является общим для всех функций. Вам кажется, что return передаёт, что попало. На самом деле там результат последней вызванной функции.
Не игнорирует, а осознанно избегает, вот так правильно.
Не игнорирует, а осознанно избегает, вот так правильно.
В связи с результатами нового теста это пост следует откорректировать. Правильно будет так:
return только завершает работу функции, но никакого значения функции не передаёт. Значение функции временно хранится в буфере, который является общим для всех функций. Вам кажется, что return передаёт, что попало. На самом деле там результат последней вызванной функции.
Вставлю ещё "свои пять копеек" для "самого большого". Нужно различать "для всех случаев" и "частный случай". Для общего случая, к сожалению, вы опять не правы: если функция имеет тип возвращаемого значения void, то даже компилятор не даст вам к return что-либо "приклеить", следовательно, функция ничего не возвратит. А если, тип возвращаемого значения отличен от void, т.е. функция должна возвратить какое-то значение, то, если вы будете использовать оператор return без возвращаемого значения, то результат получите тот, который уже получили (функция вернёт "стэковое" значение).
P.S. Такой подход "матёрых программистов" встречается на каждом шагу: использование частных программных решений, не применимых к общему случаю. Простой пример:
:)))
Вставлю ещё "свои пять копеек" для "самого большого". Нужно различать "для всех случаев" и "частный случай". Для общее случая, к сожалению, вы опять не правы: если функция имеет тип возвращаемого значения void, то даже компилятор не даст вам к return что-либо "приклеить", следовательно, функция ничего не возвратит. А если, тип возвращаемого значения отличен от void, т.е. функция должна возвратить какое-то значение, то, если вы будете использовать оператор return без возвращаемого значения, то результат получите тот, который уже получили (функция вернёт "стэковое" значение.
P.S. Такой подход "матёрых программистов" встречается на каждом шагу: использование частных программных решений, не применимых к общему случаю. Простой пример:
:)))
Читайте все посты, а не через один. О функции типа void я уже написал во 2й странице.
TarasBY:
...А если, тип возвращаемого значения отличен от void, т.е. функция должна возвратить какое-то значение, то, если вы будете использовать оператор return без возвращаемого значения, то результат получите тот, который уже получили (функция вернёт "стэковое" значение.
Об этом я и толкую и доказываю тестами, что оператор return ничего функции не передаёт независимо от того какой тип имеет функция . А если бы, как тут некоторые выражаются, передавал что попало, то в буфере бы не сохранялось значение последней вызванной функции, а было бы что попало.
И не надо меня пугать какими то осложнениями, я не собираюсь использовать этот оператор не по правилам. А в тесте его использовал лишь для того, чтобы доказать, что он ничего не передаёт функции.
return только завершает работу функции, но никакого значения функции не передаёт. Значение функции временно хранится в буфере, который является общим для всех функций. Вам кажется, что return передаёт, что попало. На самом деле там результат последней вызванной функции.
вот с такой формулировкой согласен.
вот с такой формулировкой согласен.
В ветке для новичков я и сказал, что оператор return ничего не передаёт функции. А return(0) передаёт ноль. Почему вы воспротивились этому так и не понял.)
потому что верная фраза - это так как вы написали выше. согласно её это должнро быть написано так:
return(0) передаёт ноль. задает в общей ячейке функций значение 0.
верхнюю формулировку, что результат функции это есть результат вызова последней функции, я для себя подтвердил тестом
исходя из этого можно сделать приближенный вывод, что return фактически есть тоже некая функция в трактовке MQL4. Которая помещает в этот "стек" свое значение.
это значение и будет использовано в качестве результата.
поэтому если return было использовано неверно (в стиле return; как для void функций) то и значение возьмется то что было там по результату последней функции. в примере верху сначала getTick а во втором MathAbs
В ветке для новичков я и сказал, что оператор return ничего не передаёт функции. А return(0) передаёт ноль. Почему вы воспротивились этому так и не понял.)
С Ассемблером не общался уже почти тридцать лет, остались обрывки воспоминаний.
return не передает что-то функции, а возвращает в вызывающую программу некое значение(адрес) через не помню какой регистр(из шестнадцати).
В языке Си нет понятия подпрограммы(Subroutine, значение регистра менять не имеет права), есть только функция(Function, меняет значение регистра), поэтому любая из оных может изменить содержимое этого регистра.
Как поставлен в MQL контроль этого дела, известно только богу и разработчикам.
Как-то так, или около того...