FOnline
|
Прежде чем подвергать компиляции исходный код скрипта, скрипт передается на обработку встроенному препроцессору.
Препроцессор на входе получает иходный код, написанный программистом, а на выходе выдает переработанный код, полученный с учетом указанных в скрипте директив.
Директивы препроцессора:
Директива "#include" включает в состав исходного файла содержимое указанного файла. Таким образом, после обработки препроцессором, все строки:
будут заменены содержимым указанного файла.
Директива "#define" в основном используется для создания констант и макросов:
Пример константы:
После такого объявления, в коде скрипта можно использовать строку MONEY_PID вместо прямого указания номера 41, в тех местах, где необходимо указать пид, используемый в качестве денег. После обработки препроцессором, все строки "MONEY_PID" будут заменены на "(41)"
Пример макроса:
После такого объявления, встреченные в исходном коде строки:
будут заменены на:
При этом, строка SLOT_ARMOR будет заменена на (3), так как в файле _defines.fos объявлена директива "#define SLOT_ARMOR (3) // Armor slot"
"#ifdef" - открытие блока "если определено"
"#ifndef" - открытие блока "если не определено"
"#endif" - закрытие блока
Директивы #ifdef, #ifndef и #endif существуют для еще большего удобства скриптера.
Пример исползования:
В данном примере в исходном коде после обработки препроцессором встретятся строки "Log(.......);" и "SayId(.......);", однако, если убрать или закомментировать строку "#define <strong>DEBUG</strong>", то в коде будет только строка "StartAttack(.......);"
Помимо обработки директив, препроцессор убирает из исходного кода все комментарии, так как они не важны для компилятора.
Стоит так же отметить, что при сообщении компилятором об ошибках в коде, он выдает номера строк и символов в коде после обработки препроцессором.
Обработанные препроцессором скрипты появляются при запуске сервера и находятся в папке скриптов с расширениями "fosp", если необходимо посмотреть полученный код при ручном компилировании, необходимо передать компилятору имя файла, куда будет помещен полученный код, с помощью параметра "-p".
Типичная функция после обработки препроцессором:
Исходный вид функции: