Сюрприз от #define - страница 2

 

согласно https://docs.mql4.com/ru/basis/preprosessor/constant

#define должен находиться в начале программы ( вероятно про *.mq4), однако если #define опрелелить в середине файла *.mqh, между функциями, то при компиляции ошибка не выдается.

Вопрос: разрешено ли такое использование #define в середине файла *.mqh? разрешено ли объявление массивов и переменных в середине файла *.mqh?

Почему возник этот вопрос. Все дефайны, массивы и переменные я объявляю в начале файла *.mqh. Со временем количество функций увеличивается, а также увеличивается расстояние в самом файле между "объявляемыми данными" и самой функцией для обработки этих данных. Если "разрешено", то будет удобно подтянуть "объявляемые данные" по-ближе к самой функции.

 
DDFedor >>:

согласно https://docs.mql4.com/ru/basis/preprosessor/constant

#define должен находиться в начале программы ( вероятно про *.mq4), однако если #define опрелелить в середине файла *.mqh, между функциями, то при компиляции ошибка не выдается.

Вопрос: разрешено ли такое использование #define в середине файла *.mqh? разрешено ли объявление массивов и переменных в середине файла *.mqh?

Почему возник этот вопрос. Все дефайны, массивы и переменные я объявляю в начале файла *.mqh. Со временем количество функций увеличивается, а также увеличивается расстояние в самом файле между "объявляемыми данными" и самой функцией для обработки этих данных. Если "разрешено", то будет удобно подтянуть "объявляемые данные" по-ближе к самой функции.

можно, пробовал не раз.

 
alsu писал(а) >>

можно, пробовал не раз.

тоже начал пользовать, но хотелось бы услышать "документированное" мнение по этому вопросу. работать - работает, но как это объясняется?

 
А чего тут документировать? Дефайн ставится обычно в начале программы для того, чтобы константу могли использовать все без исключения выражения - именно это подразумевается в справке. Запрета на дефайн в любом другом месте программы нет (да и какой в нем смысл?), просто видна эта константа будет только после определения, так как define обрабатывается препроцессором, это не элемент логики программы, а просто директива, указывающая, что вместо такого-то выражения в исходный текст программы надо подставить такое-то.
 
alsu писал(а) >>
А чего тут документировать?
можно было бы и задокументировать этот момент, такая возможность сразу не бросается в глаза, структура *.mqh файла улучшается при использовании такого подхода, не приходится бегать от одного куска кода( в конце файла) к другому(в начале файла), все рядом и все компактно. это я говорю не только о дефайн, но и об объявлении массивов и переменных.
Причина обращения: