Прототипы функций init, start, deinit

 

Уважаемые разработчики.

В документации https://docs.mql4.com/ru/basis/functions/special к сожалению не указано, какой тип должны возвращать специальные функции init, start и deinit.

Так, как функции описаны в документации, - вообще без возвращаемого типа, - функцию объявлять нельзя, ругается компилятор. Скажите пожалуйста точно, возвращаемый тип должен быть void или int? В большинстве примеров написано int и для выхода используется оператор return(0). Это имеет какое-либо значение? Использует ли (и хранит ли) терминал каким-либо образом то, что вернули эти функции?

 
Я это читал поиском. Там так и не дано ответа. Ни одно официальное лицо там не поставило точку в этом вопросе.
 
Shaitan >>:
Я это читал поиском. Там так и не дано ответа. Ни одно официальное лицо там не поставило точку в этом вопросе.

Init, deinit и start являются зарезервированными функциями. Тип же их никакого принципиального значения не имеет. Хотите, делайте bool или даже datetime (тот же int, кстати), т. е. никто не запрещает использовать эти функции по своему усмотрению, вызывая их принудительно. Правда, не стоит при этом забывать, что именно эти функции будут еще вызываться и событийно.

 

Ага. То есть, получается, что возвращаемый тип целенаправленно не указан для того, чтобы пользователь мог по своему усмотрению задать возвращаемый тип для своих целей при их принудительном вызове?

 
Shaitan >>:
Я это читал поиском. Там так и не дано ответа. Ни одно официальное лицо там не поставило точку в этом вопросе.

Shaitan писал(а) >>
Ага. То есть, получается, что возвращаемый тип целенаправленно не указан для того, чтобы пользователь мог по своему усмотрению задать возвращаемый тип для своих целей при их принудительном вызове?

Значит чтение с поиском не привело к пониманию того, что искали, нашли и прочитали.

Эти функции ни чего не возвращают. Стало быть, их тип не важен.

 

Дааа??? А мне кажется, наоборот, я всё правильно понял. Только вот уже в третий раз убедился, что для понимания надо ставить натурные эксперименты, - от форума помощь минимальна.

И тип важен и возвращают, если надо, и даже получают, если сильно захотеть. Это как в старом "C", хочешь - void main (void), а хочешь - int main (argc, **argv).

Запусти следующий код и сильно подивись:

#property copyright "Foo Bar"
#property link "http://www.foo.bar/"

bool IFR=true, SFR=true;



string init (int magic=0) {
  if ( IFR ) {
    Alert ("Init launched");
    IFR = false;
  }
  if ( magic==123456789 )  return ("Hello from init!");
  return ("");
}



string start (int magic=0) {
  if ( SFR ) {
    Alert ("Start launched");
    SFR = false;
    Alert ("For start init returned: \"", init(), "\"");
    Alert ("For start init returned: \"", init(123456789), "\"");
  }
  if ( magic==123456789 )  return ("Hello from start!");
  return ("");
}



string deinit (int magic=0) {
  Alert ("Deinit launched");
  Alert ("For deinit init returned: \"", init(), "\"");
  Alert ("For deinit init returned: \"", init(123456789), "\"");
  Alert ("For deinit start returned: \"", start(), "\"");
  Alert ("For deinit start returned: \"", start(123456789), "\"");
}

Отсюда вывод. Поскольку ручной вызов функций init, start и deinit, - как правило, нонсенс, то наиболее правильный вариант это void init (), void start() и void deinit ().

И ретурн из них должен быть таким: return;

 

Ну и молодец! По моему, раньше эти функции ни чего не возвращали. По крайней мере, у меня.

А по поводу параметров, то это в справке есть. Я постоянно пользуюсь вызовом этих функций с параметрами.

 

Верно. Проморгал.

Бывает. Смотрю в книгу, вижу фигу :)

Поправил код в соответствии с правилами документации (значение по умолчанию).

Причина обращения: