Урок №9 Препроцессор

              Уроки

              Всем привет! Сегодня переходим к  девятому занятию нашего курса! Надеюсь, что Вам понравились предыдущие уроки по MQL4. Мы уже поговорили про переменные. Сегодня мы рассмотрим такое понятие, как препроцессор в MQL4.

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

             Например, если Вы используете директиву #include <win32.h>, это означает, что Вы говорите препроцессору включить содержимое файла “win32.h” в том месте, где Вы написали ключевое слово include.

             В MQL4 существуют 4 препроцессорные директивы: директива define, директива property, директива include, директива import.

Директива define

               Директива define используется для задания значения константы. Константа очень похожа на переменную за тем исключением, что константе Вы придаёте значение только один раз и потом поменять его не можете.

Например:

#define my_constant		  100

                 Как Вы можете заметить в приведённом примере нет символа присваивания “=”, а есть только пробел между именем константы (my_constant) и её значением (100). И также Вы должны были заметить, что строчка не закончилась точкой с звпятой – она закончилась символом перехода на новую строку.

                 Имена констант подчиняются тем же правилам, что и имена переменных (урок №2  Синтаксис), например нельзя начинать имя константы с цифры, и его длина не должна превышать 31 символ.

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

um = constant1 * 10;

Директива property

              В MQL4 существуют заранее подготовленные переменные, называемые “Управляющие Компляцией”, значения которых можно изменять для своей программы. Для этого используется директива property — она говорит препроцессору, как настроить Ваш исполняемый файл *.ex4 .

Например:

#property link		"http://www.MYSITE.com"

#property copyright   "FreeWare"

Список предопределённых переменных MQL4:

post-798-0-49561600-1346245180

Директива include

              Использование директивы include равносильно копированию всего содержимого подключаемого файла к себе в программу, в то место, где стоит эта директива. Ctrl+C -> Ctrl+V – только за Вас это делает препроцессор.

Например:

#include <win32.h>

                В этом примере Вы говорите препроцессору, открыть файл “win32.h“, прочитать всё его содержимое и скопировать в то место, где стоит директива include.

                Внимание: Есть два различных способа указания пути к файлу:

  1. Можно указать имя файла в угольных скобках <win32.h> — тогда препроцессор будет искать его в директории по умолчанию (он знает, где она находится).
  2. Можно указать имя файла в кавычках “win32.h” — тогда препроцессор будет искать этот файл в текущей директории – в той, где будет лежать Ваш код. Если Ваш код и искомый файл лежат в разных местах, то можно указать полный путь к файлу – это тоже делается с помощью кавычек: “F:\My_folder\My_include_files\Hello.h” .

                 Директиву include можно вставить в любую часть кода, но обычно это делается в самом начале.

                Подсказка: Хорошей практикой является размещение часто употребляемого Вами кода в отдельном файле, для его дальнейшего подключения в свои программы. (просто совет).

Директива import

               Это как директива include, но есть различия. Директива import используется только для подключения исполняемых файлов MQL4 (*.ex4) и динамических библиотек (*.dll), чтобы импортировать их функции в Вашу программу.

Например:

#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 .

              Как говорит один знакомый информатик: “препроцессор помогает избежать работы обезьянкой”. Этим всё сказано 🙂 На этой нотке мы заканчиваем рассмотрение урока №9. На следующем уроке мы переходим к следующему курсу “Ваш первый индикатор”.

Добавить комментарий