PDA

Просмотр полной версии : [Вопрос] Директива



Gressie
12.06.2019, 21:18
Здравствуйте. Можно ли при помощи директив делать несколько проверок?
Например:
Если у мода имеется стример MidoStream то выполняем действие.
Если у мода имеется стример Streamer от Incognito то выполняем действие.
Если у мода не имеется вообще стример то выполняем действие

Примечание. Я представляю что можно сделать в виде
#if !defined ...
#else
...
#endif

Но как тут уместить сразу три проверки?

Daniel_Cortez
13.06.2019, 07:05
MidoStream? Сейчас вроде бы не нулевые годы и люди давно уже пользуются стримером от Incognito, в котором куда больше функционала и меньше нагрузка на сервер.

Но если вы всё ещё хотите поддерживать устаревший крап, используемый в не менее устаревших модах, потому что "эта жи мод Рустама Рича!",, или вы просто хотите лучше знать, как использовать условную компиляцию в Pawn (искренне надеюсь, что это именно второй вариант), то

#if defined Streamer_IncludeFileVersion
// Действия (1)
#elseif defined MidoStreamDisconnect
// Действия (2)
#else
// Действия (3)
#endif

Gressie
13.06.2019, 07:48
Ещё хотел уточнить. Можно ли в собственных инклудах использовать вот так, для лучшей читабельности кода?

#if defined Test
#undef Test
#endif
#define Test. _Test
new Test.Var[2];
...
Test.OnGameModeInit()
{
printf("%d %d", Test.Var[0], Test.Var[1]);
}

А в основном моде использовать сразу:

#include <filename>
public OnGameModeInit()
{
Test.OnGameModeInit();
return 1;
}
Не потеряется ли совместимость с другими перехватами?

Daniel_Cortez
13.06.2019, 23:33
Нельзя потерять то, чего нет. Так, как вы это показали, ваш перехват будет несовместим с другими.
Во-первых, обычно перехватчик вызывает перехватываемую функцию, а не наоборот. Во-вторых, не объявлен макрос "_ALS_OnGameModeInit" для совместимости (я не буду здесь углубляться в подробности о том, как это всё работает, ибо я это уже объяснял в уроках про перехваты (http://pro-pawn.ru/showthread.php?10447)).

Касаемо символа ".", совершенно вас не понимаю. Каким образом использование лишнего макроса должно улучшить читаемость? Тем более, что до макроподстановки название функции отделяется одним символом ".", что после замены тоже только одним символом "_" (правда, в вашем коде этот символ ещё и зачем-то поставлен перед префиксом). Так в чём профит?

Gressie
14.06.2019, 12:33
Нельзя потерять то, чего нет. Так, как вы это показали, ваш перехват будет несовместим с другими.
Во-первых, обычно перехватчик вызывает перехватываемую функцию, а не наоборот. Во-вторых, не объявлен макрос "_ALS_OnGameModeInit" для совместимости (я не буду здесь углубляться в подробности о том, как это всё работает, ибо я это уже объяснял в уроках про перехваты (http://pro-pawn.ru/showthread.php?10447)).

Касаемо символа ".", совершенно вас не понимаю. Каким образом использование лишнего макроса должно улучшить читаемость? Тем более, что до макроподстановки название функции отделяется одним символом ".", что после замены тоже только одним символом "_" (правда, в вашем коде этот символ ещё и зачем-то поставлен перед префиксом). Так в чём профит?

Спасибо. Я понял вас. Просто я думал что так удобней при подключении инклуда в мод. Название функции отделять точкой.