Особенности языка mql5, тонкости и приёмы работы - страница 121

 
TheXpert:

Тогда не понимаю этого

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

Особенности языка mql5, тонкости и приёмы работы

Alexey Navoykov, 2019.01.14 16:35

Ну если есть в этом потребность, то можно и в C++ объявить  void OnTick(); в самом начале.  Но вообще порядок объявления функций - это дополнительный способ контроля правильности кода.  Вот если допустим у тебя в каком-то подключаемом инклуднике случайно окажется вызов OnTick() или ещё хуже - OnInit()  - разве это хорошо?  Библиотеки не должны видеть твой рабочий код.
 
fxsaber:

Тогда не понимаю этого

ну ошибся. форвард декларации есть только для классов, структур, для функций нет.

 
fxsaber:

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

А какая проблема вставить инклудник раньше?

Это для одного файла может быть неудобно (функция с телом обязательно до вызова), но если функция в mqh - в чем проблема вставить инклуд в самом начале?

 
TheXpert:

ну ошибся. форвард декларации есть только для классов, структур, для функций нет.

Отлично, что уточнили.

Andrey Khatimlianskii:

А какая проблема вставить инклудник раньше?

Это для одного файла может быть неудобно (функция с телом обязательно до вызова), но если функция в mqh - в чем проблема вставить инклуд в самом начале?

Некоторые конструкции с макросами иногда требовали инклуда в последней строке. Конкретно пример не приведу, на практике сталкивался неоднократно.

 
TheXpert:

ну ошибся. форвард декларации есть только для классов, структур, для функций нет.

хотя нет, я тоже неправ. у функции есть объявление и определение.
 
fxsaber:

Некоторые конструкции с макросами иногда требовали инклуда в последней строке. Конкретно пример не приведу, на практике сталкивался неоднократно.

Ну это уже что-то совсем экзотическое.  Не думаю, что отдельно взятые макросы стоят того, чтобы ради них жертвовать правильностью архитектуры.

Впрочем ладно, это уже второстепенный вопрос.  Как бы то ни было, код программы в любом случае должен выполняться точно в соответствии с заложенным в него алгоритмом. Доступ к переменной раньше её инициализации - это нонсенс.  Такое не должно компилироваться.

 

Кстати, если в инклуде используются какие-то функции, которых там нет, то они всё-равно должны быть объявлены там. Так же как и классы, и extern-переменные.  Иначе это уже какой-то костыль, а не инклуд.

Соответственно инклуд не должен зависеть от того, в каком месте программы он вставлен.

 
Alexey Navoykov:
Кстати, если в инклуде используются какие-то функции, которых там нет, то они всё-равно должны быть объявлены там. Так же как и классы, и extern-переменные.  Иначе это уже какой-то костыль, а не инклуд

А что такое, по-Вашему, инклуд? Для меня это просто кусок текста, выделенный в отдельный файл. И повторное его включение в исходник игнорируется. Больше ничего.

 
fxsaber:

А что такое, по-Вашему, инклуд? Для меня это просто кусок текста, выделенный в отдельный файл. И повторное его включение в исходник игнорируется. Больше ничего.

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

 
Alexey Navoykov:

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

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

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