Pawn. Директивы препроцессора
Директивы указывают компилятору как нужно компилировать скрипт. В Pawn директивы похожи на директивы C++, они тоже являются директивами препроцессора и имеют схожий синтаксис. Ещё директивы препроцессора нужны для обеспечения удобства над работой скрипта и оптимизации работы мода. В данной статье будет рассказано не о всех существующих директивах, т.к. для рядовых скриптеров они не понадобятся.
#include
🔗︎
Директива #include подключает файл в скрипт. С её помощью можно хорошо и удобно структуризовать скрипт. Если указаного файла не будет, компилятор ругнётся. Если расширение не указать, то по умолчанию идёт расширение .inc, расширение может быть любым.
Использование:
#include "filename.lol" // подключит файл из папки с компилируемым скриптом
#tryinclude
🔗︎
Директива #tryinclude также как и #include подключает файл в скрипт. Они имеют одинаковое действие, но различие в том, что если подключаемый файл не найден, то компилятор пропустит эту директиву и не будет выдавать ошибок.
Использование:
#tryinclude "filename.lol" // подключит файл из папки с компилируемым скриптом
#define
🔗︎
Директива #define как-бы заменяет себя на указанное значение. Очень удобно использовать для экономии памяти.
Использование:
#define HW_MSG "Hello World" // в процессе компиляции меняет HW_MSG на "Hello World"
main()
{
print(HW_MSG);
}
#define SendMSG(%0,%1) SendClientMessage(%0,0x331166FF,%1) // зададим с параметрами %0 и %1
main()
{
SendMSG(0,"Hello World!"); // в процессе компиляции заменится на SendClientMessage(0,0x331166FF,"Hello World!");
}
#undef
🔗︎
Директива обратная #define. Как можно догадаться, она 'раздефайневает'(удаляет), директиву.
Использование:
#define HW_MSG // 'задефайним' HW_MSG
#undef HW_MSG // 'раздефайним' HW_MSG
main()
{
#if defined HW_MSG // если HW_MSG задефайнен
print("HW_MSG is defined!"); // будет выбрано в итоге
#elseif
print("HW_MSG is not defined!");
#endif
}
#if
, #elseif
, #else
, #endi
🔗︎
Директивы #if, #elseif, #else и #endif это обычные условия, но выполняемые препроцессором. С их помощью можно исключить из компиляции участки не нужного вам кода или сделать настройку скрипта через #define и #if, #else.
Использование:
#define HW_MSG // 'задефайним' HW_MSG
main()
{
#if defined HW_MSG // если HW_MSG задефайнен
print("HW_MSG is defined!"); // будет выбрано в итоге
#elseif
print("HW_MSG is not defined!");
#endif
}
//#define HW_MSG // не будем дефайнить HW_MSG
main()
{
#if !defined HW_MSG // если HW_MSG НЕ задефайнен
print("HW_MSG is not defined!"); // будет выбрано в итоге
#elseif
print("HW_MSG is defined!");
#endif
}
#error
🔗︎
Выдаёт ошибку компиляции с указанным текстом. Она обычно используется в модульных скриптах, для увеличения скорости компиляции при нахождении недостающих функций.
Использование:
#if !defined strtok // если функция strtok не задефайнена
#error strtok not found in script! // выдаст 'strtok not found in script!' при выполнении условия
#endif
#endinput
🔗︎
Если компилятор встречает #endinput в файле, то он игнорирует весь ниженаписанный код.
Использование:
#if defined USE_THIS
#endinput
#endif