MQL4 УРОК 9 – Препроцессор
Что такое препроцессор?
Препроцессор – это программа, обеспечивающая предварительную обработку кода для его подготовки к компиляции.
Например, если Вы используете директиву #include <win32.h>, это означает, что Вы говорите препроцессору включить содержимое файла "win32.h” в том месте, где Вы написали ключевое слово include.
В MQL4 существуют 4 препроцессорные директивы:
1 – директива define
Директива define используется для задания значения константы.
Константа очень похожа на переменную за тем исключением, что константе
Вы придаёте значение только один раз и потом поменять его не можете.
Например:
Как Вы можете заметить в приведённом примере нет символа присваивания
"=”, а есть только пробел между именем константы (my_constant) и её
значением (100).
И также Вы должны были заметить, что строчка не закончилась точкой с
запятой – она закончилась символом перехода на новую строку.
Имена констант подчиняются тем же правилам, что и имена переменных
(урок 2 – Синтаксис), например нельзя начинать имя константы с цифры, и
его длина не должна превышать 31 символ.
Значение константы может быть любым.
Препроцессор просто заменит Вашу константу на её значение везде, где повстречает её в коде. Да именно так - заменит одни символы (имя константы) на другие (её значение). И всё это произойдёт до компиляции, поэтому компилятор даже не заметит, что у Вас была какая-то константа.
Так что, Вашу константу можно применить, например так:
2 – директива property
В MQL4 существуют заранее подготовленные переменные, называемые
"Управляющие Компиляцией”, значения которых можно изменять для своей
программы.
Для этого используется директива property - она говорит препроцессору, как настроить Ваш исполняемый файл *.ex4 .
Пример:
|
#property link "http://www.MYSITE.com" #property copyright "FreeWare" |
Список предопределённых переменных MQL4:

3 – директива include
Использование директивы include равносильно
копированию всего содержимого подключаемого файла к себе в программу, в
то место, где стоит эта директива. Ctrl+C -> Ctrl+V – только за Вас
это делает препроцессор.
Пример:
В этом примере Вы говорите препроцессору, открыть файл "win32.h", прочитать всё его содержимое и скопировать в то место, где стоит директива include.
Внимание: Есть два различных способа указания пути к файлу.
- Можно указать имя файла в угольных скобках <win32.h> - тогда препроцессор будет искать его в директории по умолчанию (он знает, где она находится).
- Можно указать имя файла в кавычках "win32.h” - тогда
препроцессор будет искать этот файл в текущей директории – в той, где
будет лежать Ваш код. Если Ваш код и искомый файл лежат в разных местах,
то можно указать полный путь к файлу – это тоже делается с помощью
кавычек: "F:\My_folder\My_include_files\Hello.h” .
Директиву include можно вставить в любую часть кода, но обычно это делается в самом начале.
Подсказка: Хорошей практикой является размещение
часто употребляемого Вами кода в отдельном файле, для его дальнейшего
подключения в свои программы.
(просто совет).
4 – директива import
Это как директива include, но есть различия.
Директива import используется только для подключения
исполняемых файлов MQL4 (*.ex4) и динамических библиотек (*.dll), чтобы
импортировать их функции в Вашу программу.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#import "user32.dll" int MessageBoxA(int hWnd,string lpText,string lpCaption, int uType); int MessageBoxExA(int hWnd,string lpText,string lpCaption, int uType,int wLanguageId); #import "melib.ex4" #import "gdi32.dll" int GetDC(int hWnd); int ReleaseDC(int hWnd,int hDC); #import |
Когда Вы импортируете функции из файла *.ex4 нет необходимости их объявлять.
Когда Вы импортируете функции из файла *.dll необходимо объявлять функции, чтобы они были готовы к использованию.
Пример объявления функции:
|
int MessageBoxA(int hWnd,string lpText,string lpCaption, int uType); |
Импорт функций начинается со строчки #include "имя файла” (или в угольных скобках).
Импорт функций заканчивается строчкой #include .
Как говорит один знакомый информатик: "препроцессор помогает избежать работы обезьянкой”. Этим всё сказано .
|