Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Pytanie o define


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 30.11.2019 18:49

#define def1(%1.%2) ((%1>23:23:%1)*60+(%2>59?59:%s))
#define def2 def1(14.30)

Czy amxx zaakceptuje taki define i czy jeśli tak to czy wartość def2 będzie 870 ?


  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 559
Godlike

  • Postów:11 998
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 30.11.2019 19:19

A nie mozesz po prostu tego skompilować i sprawdzic :P ?


  • +
  • -
  • 2

#3 Robiin

    Godlike

  • Support Team

Reputacja: 1 110
Super Hero

  • Postów:2 066
  • Imię:Robert
  • Lokalizacja:Wrocław
Online

Napisano 30.11.2019 19:25

Argumenty w makrodefinicjach oddzielasz przecinkiem, nie kropką (def1).

 

Skrócony if ma taki syntax:

condition ? true : false

Według def1 próbujesz zrobić coś takiego:

14 > 23 : 23 : 14

Więc pierwszy dwukropek powinien być '?', o ile w ogóle o to Ci chodzi.

 

Nie wiem jak to ma działać do końca, ale niepokoi mnie ten %s na samym końcu. Wszystko zależy od kodu w obrębie makrodefinicji - a tego nie dostarczyłeś.

 

Tak jak @up, czemu nie sprawdzisz sam? Skoro już wiesz, że oczekujesz wyniku 870, to na pewno obmyśliłeś jak ma to działać.

 

Dodatkowo, jeśli piszesz tak złożone działania to bardzo ciężko to rozczytać, przez co kod wygląda niczym po obfuskacji. Oddzielaj spacją znaczące części:

#define def1(%1,%2) ((%1 > 23 : 23 : %1) * 60 + (%2 > 59 ? 59 : %s))

Użytkownik Wicked. edytował ten post 30.11.2019 19:28

  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#4 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 30.11.2019 20:36

Właściwie to przy przepisywaniu zrobiłem 2 błędy: zamiast : powinno być ? i zamiast %s powinno być %2, kropka była tam celowo.

Już zdążyłem się przekonać że to nie działa, ale mam kolejne pytanie.

 

W jaki sposób sprawdzić w kodzie czy wartość define jest równa np. 64 tak żeby całkiem pominąć część kodu jeśli tak nie jest ?

Mam na myśli coś takiego:

#if defined def1
//code
#endif
//code

Próbowałem napisać

#if defined def1 == 43

ale to w ten sposób nie działa :/


  • +
  • -
  • 0

#5 Robiin

    Godlike

  • Support Team

Reputacja: 1 110
Super Hero

  • Postów:2 066
  • Imię:Robert
  • Lokalizacja:Wrocław
Online

Napisano 30.11.2019 22:56

#define value 5

#if value > 5

// Code

#endif

W taki sposób sprawdzana jest np. wersja amxx przy kompilacji (kompilator używa w headerze AMX_VERSION i AMX_VERSION_NUM), co daje nam możliwość zrobienia takiej operacji:

Spoiler

 

O co chodziło z kropką?


Użytkownik Wicked. edytował ten post 30.11.2019 23:06

  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#6 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 01.12.2019 13:05


O co chodziło z kropką?

Po prostu tak lepiej by mi define wyglądały.


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych