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