По очереди подключены 2 инклуда. Как в верхнем проверить существование нижнего, а в нижнем - верхнего, через директивы? Чтобы без посредника.
Вид для печати
По очереди подключены 2 инклуда. Как в верхнем проверить существование нижнего, а в нижнем - верхнего, через директивы? Чтобы без посредника.
Не думаю, что директивами нормально получится сделать проверку существования нижнего инклуда в верхнем, так как препроцессор всего раз проходит по скрипту, как я знаю. Хотя вообще непонятно зачем это. Достаточно просто в нижнем проверять существование верхнего, а в верхнем всё объявлять через stock, чтоб если нижний инклуд исчез, то и код верхнего сам по себе "отключался".
Ну так же, как вариант - создать функцию в каждом инклуде и вызывать функцию одного инклуда в другом. Будет ошибка о том, что функции нет - инклуд не подключён :D Хотя можно просто ошибку выдавать не при компиляции, а при запуске сервера, например, объявляя в инклудах GVar, а потом проверяя их наличие
В верхнем:
В нижнем:PHP код:
#if defined PROTOCOLS
GivePlayerProtocolPoints(playerid, PROTOCOL_MANAGER, 5);
#endif
PHP код:
#if defined BIGMONEY
pvar = GetPVarInt(playerid, !"BigMoneyPlayer");
#endif
Если нужного инклуда нет, часть код связанная с ним условно будет в памяти.
Во-первых, это никакой особой погоды не сделает (ты же не на калькуляторе собрался сервер запускать).
Во-вторых, в моих вариантах подразумевается, что ты вырубаешь сервер через SendRconCommand("exit"), если инклуд не найден.
Хотя всё ещё не вижу в этом большого смысла. Паблик-моды и с большими проблемами существуют, работая, при этом.
Компилятор проходит по скрипту как минимум 2 раза. Первый проход нужен в основном для того, чтобы собрать информацию обо всех глобальных идентификаторах (переменных, функциях, константах). Кроме того, на 1-м проходе возникает много ошибок (например, когда функция где-то вызывается, но ещё не объявлена/реализована), но все они подавляются и не выводятся в консоль.
Сама же компиляция происходит на 2-м проходе, когда компилятор уже один раз "просмотрел" содержимое скрипта и знает о существовании всех констант/переменных/функций. Как пример, именно за счёт такого принципа работает оператор defined, которым можно проверить существование функции до её объявления (что часто можно увидеть при перехвате функций).
Так какой выход из ситуации?