Добавлен Raised,
опубликован
cJass
Содержание:
6.1 Подключение внешних файлов
Иногда удобно держать отдельные части кода во внешних файлах — часто используемые библиотеки, системы и заклинания, созданные другими, и прочее. Для включения в карту кода из внешних файлов в синтаксисе cJass существует директива include, после которой должна следовать строка с именем подключаемого файла. Файлы с кодом, подключаемые этой директивой, могут находиться в подпапке "lib" папки с парсером AdicHelper или в папке с картой — тогда можно передавать путь относительно этих папок. Также можно подключать файлы из любых других папок, но при этом нужно указывать полный путь к ним.
include "myClasses.j" // будет подключен файл "AdicHelper\lib\myClasses.j"
include "D:\\dev\\Warcraft 3\\my_mega_system.j"
Код, подключаемый с помощью этой директивы, может быть написан с использованием синтаксиса cJass и vJass.
Внимание! Не забывайте, что обратный слэш в строках нужно экранировать: \\
Внимание! Не забывайте, что обратный слэш в строках нужно экранировать: \\
Иногда возникает ситуация, при которой один и тот же внешний файл включается в карту несколько раз, например, разными библиотеками. В таком случае возникнут неизбежные ошибки из-за повторения кода, чего хотелось бы избежать. Для этого в cJass существует директива #guard идентификатор, которая предотвращает повторное подключение внешних файлов с одинаковыми идентификаторами. В качестве идентификаторов может выступать любое слово, но принято использовать для этого имя файла, в котором все недопустимые символы (например, точки) заменены на знаки подчёркивания. К примеру, во внешнем файле "my-system.j" идентификатор может быть таким: #guard my_system_j.
Внимание! Директива #guard должна стоять в самом начале подключаемого файла.
6.2 Условная трансляция
Синтаксис cJass вводит в язык полезные команды условной трансляции. С помощью этих команд части кода могут быть включены или исключены из карты на стадии трансляции. Управляющими элементами в командах условной трансляции могут быть значения, макросы или перечисления (См. 7). Синтаксис этих команд следующий:
define CONTROL = 3
#if CONTROL == 3
// code
#elseif CONTROL == 1
// alternative code
#else
// another code
#endif
На данный момент в командах #if и #elseif возможно использование только операций сравнения == и !=
В блоках условной трансляции можно писать любой код с одним ограничением: в них не должны определяться макросы с одинаковыми именами:
#if 1 != 0
define msg = "hello!"
#else
define msg = "good bye!"
#endif
При попытке сохранить данный код транслятор выдаст ошибку повторного объявления макроса. Если вы хотите использовать код, аналогичный приведенному выше, то нужные макросы стоит объявить до блока условной трансляции, а в самом блоке просто назначить этим макросам значения с помощью директивы setdef:
define msg
#if 1 != 0
setdef msg = "hello!"
#else
setdef msg = "good bye!"
#endif
Директивы условной трансляции также могут срабатывать при определенном состоянии флага — им выступает особого вида макроопределение.
define FLAG = true
#if FLAG
// code
#else
// alternative code
#endif
Директива #if value сработает только если сравниваемое макроопределение имеет значение true или 1.
6.3 Другие директивы
В некоторых случаях возникает необходимость остановить компиляцию и выдать пользователю ошибку: например, если не выполнено какое-то требование библиотеки. Тогда на помощь придёт директива #error "MSG", которая остановит компиляцию с этим сообщением. Выгодно использовать внутри блоков условной компиляции.
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.