Автор: Rubick
Что такое директива?
Условная компиляция которая дает возможность разработчику управлять выполнением директив препроцессора и компиляцией кода.
Каждая директива препроцессора вычисляет значение целочисленного константного выражения.
Директивы пишутся через знак '#'
Давайте разберём директивы:
1. Include / Tryinclude
Code: Select all
#include
Данная директива позволит подключать файлы с расширением .inc
Использовать команду можно так:
Code: Select all
#include a_samp
либо
Code: Select all
#include ../Includes/a_defines
Возможно также вместо директивы #include использовать #tryinclude Но они отличаются только если использовать #include то если файл не найден компилятор выдаст ошибку, а при использовании #tryinclude компилятор проигнорирует отсутствие файла.
2. Define
Данная директива позволит использовать себя как макрос, так и константу. Например если вы не помните как пишется значение из кода цветов:
Code: Select all
SendClientMessage(playerid, 0xFFFFFFAA, "На сервер было отправлено сообщение с белым цветом");
Где 0xFFFFFFAA - там ID цвета из таблицы цветов. Легче использовать через #define Например:
Code: Select all
#define W 0xFFFFFFAA
Теперь попробуем использовать его в отправке сообщения игроку.
Code: Select all
SendClientMessage(playerid, W, "На сервер было отправлено сообщение с белым цветом");
Теперь работать с цветами стало намного легче, не так ли? Данный способ является константой. Давайте приступим к разбору макроса.
Большинство начальных скриптеров понятия не имеют что для создания нестандартной функции не прописанной в a_samp.inc можно обходиться без forward. А я вам предлагаю способ для решения этой проблемы и небольшой оптимизации.
Начинаем:
Code: Select all
#define apublic%0(%1) forward%0(%1); public %0(%1)
Теперь мы можем привязать вместо добавления forward просто:
Code: Select all
apublic Testing()
{
printf("It's works!");
}
Правда удобная функция макрос? Правда! Приступаем на шаг вперёд! Существует аналогичная функция #undef, только выполняет она обратное действие т.е раздефайнивает. Например:
Code: Select all
#define WorkYes
#undef WorkYes
#define WorkNo
Вообщем функция в основном используется для изменения количества слотов используемых на сервере, например:
Code: Select all
#undef MAX_PLAYERS
#define MAX_PLAYERS 250
Где 250: Там количество слотов сервера. Также можно использовать и с транспортом: MAX_VEHICLES и т.п. Приступаем к изучению следующей директиве:
3. Pragma
Code: Select all
#pragma
Виды #pragma:
Code: Select all
#pragma tabsize 0
#pragma dynamic [Количество памяти в стеке]
#pragma unused
Там где tabsize - 0 это избавляет вас от Warning 215 т.е от не табулированного кода, данная директива лишь скрывает его, но не исправляет!
dynamic [Количество памяти в стеке] необходимо чтобы компиляция происходила в одну строку без выявления утечек памяти, если у вас будет крупная утечка то мод запустится с ошибкой, соответственно не будет работоспособным. Чтобы не использовать данную функцию необходимо экономить память в массиве, например для строчки:
Code: Select all
Я люблю Pawno-Info
18 строк прибавляем +1 получается 19, записываем её как:
Code: Select all
new string[19];
Таким образом не рекомендуется использовать:
new string[256]; в каждой строке иначе будет утечка памяти!
Для того чтобы подсчитать количество строк в тексте нет необходимости считать её вручную т.к была создана специальная программа для подсчёта строк созданная Daniel_Cortez. Спасибо ему за эту программу! Функция увеличивает размер стека.
Приступаем к следующей функции из директивы #pragma это unused Например вы добавили переменную, но использовать её не решили и при компиляции у вас выходит Warning что функция не используется, чтобы его убрать вводите:
Code: Select all
#pragma unused [Название переменной]