Виды директив

Описание: Основы скриптинга
Модератор: SJplayer

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 20 мая 2013, 10:25

Виды директив
Автор: Rubick

Что такое директива?

Условная компиляция которая дает возможность разработчику управлять выполнением директив препроцессора и компиляцией кода.
Каждая директива препроцессора вычисляет значение целочисленного константного выражения.

Директивы пишутся через знак '#'

Давайте разберём директивы:

1. Include / Tryinclude

Код: Выделить всё

#include   


Данная директива позволит подключать файлы с расширением .inc
Использовать команду можно так:

Код: Выделить всё

#include a_samp   


либо

Код: Выделить всё

#include ../Includes/a_defines   


Возможно также вместо директивы #include использовать #tryinclude Но они отличаются только если использовать #include то если файл не найден компилятор выдаст ошибку, а при использовании #tryinclude компилятор проигнорирует отсутствие файла.

2. Define

Данная директива позволит использовать себя как макрос, так и константу. Например если вы не помните как пишется значение из кода цветов:

Код: Выделить всё

SendClientMessage(playerid, 0xFFFFFFAA, "На сервер было отправлено сообщение с белым цветом");


Где 0xFFFFFFAA - там ID цвета из таблицы цветов. Легче использовать через #define Например:

Код: Выделить всё

#define W 0xFFFFFFAA  


Теперь попробуем использовать его в отправке сообщения игроку.

Код: Выделить всё

SendClientMessage(playerid, W, "На сервер было отправлено сообщение с белым цветом");


Теперь работать с цветами стало намного легче, не так ли? Данный способ является константой. Давайте приступим к разбору макроса.
Большинство начальных скриптеров понятия не имеют что для создания нестандартной функции не прописанной в a_samp.inc можно обходиться без forward. А я вам предлагаю способ для решения этой проблемы и небольшой оптимизации.
Начинаем:

Код: Выделить всё

#define apublic%0(%1) forward%0(%1); public %0(%1)   


Теперь мы можем привязать вместо добавления forward просто:

Код: Выделить всё

apublic Testing()
{
 printf("It's works!");
}


Правда удобная функция макрос? Правда! Приступаем на шаг вперёд! Существует аналогичная функция #undef, только выполняет она обратное действие т.е раздефайнивает. Например:

Код: Выделить всё

#define WorkYes
#undef WorkYes
#define WorkNo   


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

Код: Выделить всё

#undef MAX_PLAYERS
#define MAX_PLAYERS 250  


Где 250: Там количество слотов сервера. Также можно использовать и с транспортом: MAX_VEHICLES и т.п. Приступаем к изучению следующей директиве:

3. Pragma

Код: Выделить всё

#pragma   


Виды #pragma:

Код: Выделить всё

#pragma tabsize 0

#pragma dynamic [Количество памяти в стеке]

#pragma unused   


Там где tabsize - 0 это избавляет вас от Warning 215 т.е от не табулированного кода, данная директива лишь скрывает его, но не исправляет!
dynamic [Количество памяти в стеке] необходимо чтобы компиляция происходила в одну строку без выявления утечек памяти, если у вас будет крупная утечка то мод запустится с ошибкой, соответственно не будет работоспособным. Чтобы не использовать данную функцию необходимо экономить память в массиве, например для строчки:

Код: Выделить всё

Я люблю Pawno-Info


18 строк прибавляем +1 получается 19, записываем её как:

Код: Выделить всё

new string[19];


Таким образом не рекомендуется использовать:
new string[256]; в каждой строке иначе будет утечка памяти!

Для того чтобы подсчитать количество строк в тексте нет необходимости считать её вручную т.к была создана специальная программа для подсчёта строк созданная Daniel_Cortez. Спасибо ему за эту программу! Функция увеличивает размер стека.

Приступаем к следующей функции из директивы #pragma это unused Например вы добавили переменную, но использовать её не решили и при компиляции у вас выходит Warning что функция не используется, чтобы его убрать вводите:

Код: Выделить всё

#pragma unused [Название переменной]   
[center]i love you [s]mxIni[/s] Mysql[/center]


Вернуться в «Основы скриптинга»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 6 гостей