На суд просвещённой публики. - страница 2

 
khorosh:
return только завершает работу функции, но никакого значения функции не передаёт. И то что вы думаете, что вернуть может в функцию что угодно, это только кажется, так как в функции внутри старта может оставаться ранее переданное ей значение, если кроме оператора return в ней используется оператор return(x), который ранее ей передал результаты каких нибудь вычислений.


Не собираюсь вас ни в чем переубеждать. Я придерживаюсь мнения TheXpert. Вам желаю удачи в отлове багов.
 

sergeev:

...


// с чего вам пришла идея, что у функции есть память? это ж не переменная

...

Если бы функция не имела памяти, то она не могла бы принять какое либо значение от оператора return(x) и мы не могли бы передать из неё ничего какой либо другой переменной или тому же оператору Print() . В решете воду не унесёшь.) Функция это тоже особым образом оформленная переменная, которая объединена с подпрограммой для вычисления значения этой переменной. Исключением является функция типа void, ей ничего не передаётся и в ней ничего не хранится.
 
khorosh:
Если бы функция не имела памяти, то она не могла бы принять какое либо значение от оператора return(x) и мы не могли бы передать из неё ничего какой либо другой переменной или тому же оператору Print() . В решете воду не унесёшь.) Функция это тоже особым образом оформленная переменная, которая объединена с подпрограммой для вычисления значения этой переменной. Исключением является функция типа void, ей ничего не передаётся и в ней ничего не хранится.

Юрий, у вас с логикой все в порядке?


скажите, куда сохранился невыданный результат функции F1 ?

и почему он меняется каждый раз?

int start()
{
        Print(F1()); Sleep(10);
        Print(F1());
}
//+------------------------------------------------------------------+
int F1()
{
        if (GetTickCount()>0) return;
}
 
sergeev:

Юрий, у вас с логикой все в порядке?


скажите, куда сохранился невыданный результат функции F1 ?

и почему он меняется каждый раз?

Я уже писал, что не понимаю вашего теста, лучше объясните мне, что неправильно в моём тесте.
 

Разобрался окончательно. Сделал новый тест и выяснил, что я был не прав, когда написал, что значение функции сохраняется внутри функции старт до выхода из неё. Правильным ответом будет: функция сохраняет своё значение от момента её исполнения до момента вызова какой либо другой функции внутри функции старт. А это значит, что для всех функций существует общий буфер, где временно хранятся значения функций на этом интервале времени.

В связи с этим моё высказывание, что функция хранит своё значение как локальная переменная, также неправильное. Однако всё это не опровергает моё высказывание, что return(0) возвращает ноль, а return ничего не возвращает, из-за которого появились разногласия с Сергеевым. Для подтверждения моих вышеприведённых утверждений привожу два теста и их результаты.

Тест 1.

int start()
  {
//----
   
     
      Print("F2(1)=",F2(1));
      Print("F2(0)=",F2(0));
     
//----
   return(0);
  }
//+------------------------------------------------------------------+

int F2(bool z)
   {
    if(z)
      {
       return(77);
      }
    else
      {
       return;
      }
   }

Результат теста:

2014.01.08 15:29:20 2013.01.01 23:00 Pustoy1 EURUSD,H1: F2(0)=77

2014.01.08 15:29:20 2013.01.01 23:00 Pustoy1 EURUSD,H1: F2(1)=77

Тест 2

между двумя вызовами одной и той же функции F2() помещаем вызов функции F1()

int start()
  {
//----
   
     
      Print("F2(1)=",F2(1));
      Print("F1()=",F1());
      Print("F2(0)=",F2(0));
     
//----
   return(0);
  }
//+------------------------------------------------------------------+
int F1()
  {
   return(33);
  }
int F2(bool z)
   {
    if(z)
      {
       return(77);
      }
    else
      {
       return;
      }
   }

результат:

2014.01.08 15:36:48 2013.01.01 23:00 Pustoy1 EURUSD,H1: F2(0)=33

2014.01.08 15:36:48 2013.01.01 23:00 Pustoy1 EURUSD,H1: F1()=33

2014.01.08 15:36:48 2013.01.01 23:00 Pustoy1 EURUSD,H1: F2(1)=77

Как видим в этом случае при повторном вызове функции F2() мы имеем значение функции F1() переданное ей в буфер.

Таким образом считаю, что вопрос решён окончательно. Спасибо всем принявшим участие в его обсуждении.

 
khorosh:

Разобрался окончательно. Сделал новый тест и выяснил, что я был не прав, когда написал, что значение функции сохраняется внутри функции старт до выхода из неё. Правильным ответом будет: функция сохраняет своё значения от момента её исполнения до момента вызова какой либо другой функции внутри функции старт. А это значит, что для всех функций существует общий буфер, где временно хранятся значения функций на этом интервале времени.

...ну вот - это уже "ближе к телу".

khorosh:

В связи с этим моё высказывание, что функция хранит своё значение как локальная переменная, также неправильное. Однако всё это не опровергает моё высказывание, что return(0) возвращает ноль, а return ничего не возвращает, из-за которого появились разногласия с Сергеевым.

А теперь возвратимся к истоку . Я считаю, что ваш пост "не по делу" (человек, которому оно адресовано, вас, вряд ли, поймёт без дополнительных объяснений о возвращении функциями каких-то значений)!!! - хотя "по сути" для частного случая утверждение может быть правильным. Не забывайте, что ещё кто-то следит за контекстом ведущегося разговора. :)

 
TarasBY:

...ну вот - это уже "ближе к телу".

... Не забывайте, что ещё кто-то следит за контекстом ведущегося разговора. :)

Ну конечно же, большой брат не дремлет!)))
 

Юрий, Вы эксперементируете с недокументированными возможностями. В нормальном компиляторе этот код невозможен!

Правильный программист игнорирует недокументированные возможности. Ибо, они могут в любой момент измениться. Ранее работавший код перестанет работать.

 
Vinin:
очень хорошо подытожил, в тему прям, всем пасиб за конструктивный диалог, приводящий к взаимополезному результату. )))
 
Zhunko:

Юрий, Вы эксперементируете с недокументированными возможностями. В нормальном компиляторе этот код невозможен!

Правильный программист игнорирует недокументированные возможности. Ибо, они могут в любой момент измениться. Ранее работавший код перестанет работать.

Поменяется компилятор - поменяю код, у меня в отличии от вас наработок совсем немного. И мне это не составит труда.
Причина обращения: