Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

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

Статус
В этой теме нельзя размещать новые ответы.

Rubick

Умник
Добрый день уважаемые пользователи Pawno-Info!

На данный портал я решил выложить свой первый урок по познаниям директив.

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

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

Директивы пишутся через знак '#'
Давайте разберём директивы:

1. Include / Tryinclude

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

Использовать команду можно так:

PHP:
#include a_samp
либо

PHP:
#include ../Includes/a_defines
Возможно также вместо директивы #include использовать #tryinclude

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

2. Define

Данная директива позволит использовать себя как макрос, так и константу.

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

PHP:
SendClientMessage(playerid, 0xFFFFFFAA, "На сервер было отправлено сообщение с белым цветом");
Где 0xFFFFFFAA - там ID цвета из таблицы цветов.

Легче использовать через #define

Например:

PHP:
#define W 0xFFFFFFAA
Теперь попробуем использовать его в отправке сообщения игроку.

PHP:
SendClientMessage(playerid, W, "На сервер было отправлено сообщение с белым цветом");
Теперь работать с цветами стало намного легче, не так ли?

Данный способ является константой.

Давайте приступим к разбору макроса.

Большинство начальных скриптеров понятия не имеют что для создания нестандартной функции не прописанной в a_samp.inc можно обходиться без forward.

А я вам предлагаю способ для решения этой проблемы и небольшой оптимизации.

Начинаем:

PHP:
#define apublic%0(%1) forward%0(%1); public %0(%1)
Теперь мы можем привязать вместо добавления forward просто:

PHP:
apublic Testing()
{
 printf("It's works!");
}
Правда удобная функция макрос? Правда!

Приступаем на шаг вперёд!

Существует аналогичная функция #undef, только выполняет она обратное действие т.е раздефайнивает.

Например:

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

PHP:
#undef MAX_PLAYERS
#define MAX_PLAYERS 250
Где 250: Там количество слотов сервера.

Также можно использовать и с транспортом: MAX_VEHICLES и т.п.

Приступаем к изучению следующей директиве:

PHP:
#pragma
Виды #pragma:

PHP:
#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. Спасибо ему за эту программу!

Ссылка на программу StringLenght

Функция увеличивает размер стека.


Приступаем к следующей функции из директивы #pragma это unused

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

PHP:
#pragma unused [Название переменной]
На сегодня урок закончен, он будет дополняться по мере появления благодарностей.

Чтобы не было вопросов ещё существует много директив, например #emit, но урок о ней существует на портале...

В случае если существует тема т.к я пробовал искать, но подобной не нашлось к сожалению... То скажу что данный урок полностью и подробно изменит ваши представления о директивах.

Автор урока: Rubick
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу