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

Основы скриптинга

Moderator: SJplayer

Avatar
Topic author
Дим M
Администратор
Администратор
Posts: 1319
With us: 7 years 5 months

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

Post #1by Дим » 20 May 2013, 10:25

Виды директив
Автор: 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 [Название переменной]   
i love you mxIni Mysql

! ! !


  • Similar Topics
    Replies
    Views
    Last post

Return to “Основы”

Who is online

Users browsing this forum: 2 guests