Taigi #define ir const

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
Post Reply
User avatar
xFrostas
Flooderis arba specialistas
Posts: 660
Joined: 2010 Sep 02 15:47
Skype: frost.lt

Taigi #define ir const

Post by xFrostas »

Norėčiau daugiau sužinoti apie tai kur kurį yra efektyviau/geriau naudoti, buvau radęs šitame forume kažką panašaus. Tai paaiškinkit jei galit.

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Taigi #define ir const

Post by aaarnas »

#define yra preprocesorius apdorojamas kompiliatoriaus.
Tai yra savotiškas "replace".

Esmė ta, kad preprocesoriai yra apdorojami dar prieš sukompiliuojant. Sukompiliuotame plugine tiesiog su define aprašytos reikšmės yra įkeliamos į tas vienas, kur jis panaudotas.

Tarkim yra:

Code: Select all

#define AMOUNT 5set_user_health(id, AMOUNT)
Sukompiliuotas kodas atrodys taip:

Code: Select all

set_user_health(id, 5)
const kintamasis yra konstanta. Konstanta - reikšmė, kurią galima tik skaityti, negalima jos redaguoti. const kintamasis per jo inicializaciją įgauną reikšmę ir bet koks bandymas priskirti kažkokią reikšmę tam kintamajam sukels kompiliavimo klaidą.

Skirtumas būtų tas, kad const kintamasis yra normalus kintamasis. Jam yra išskiriama 4 baitai ram atminties ir papildoma eilutė kodo segmente inicializuojanti kintamąjį ir jo reikšmę.
define - tiesiog reikšmė įrašyta funkcijoje.

Apskritai, nematau tikslo Pawn kalboje naudoti const kintamųjų. Jie naudingi nebent tik funkcijose, parametrus pažymint const, kurie neturėtų keistis pagal idėją, dėl aiškumo daugiau.

const pravartesnis yra tokiose kalbose kaip C, C++ ar Java final. Ten kartais naudinga pasidaryti const pointerius ar objekte turėti konstaninius laukus. Irgi daugiau dėl aiškumo ir saugumo.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: Taigi #define ir const

Post by hleV »

[pawn]#define DEFINED_STRING "ilgas tekstas <...>"new const ALLOCATED_STRING[] = "ilgas tekstas <...>"; public client_PreThink(){    DoSomething("ilgas tekstas <...>"); // Sukuriamas masyvas laikyti tekstui.    DoSomething(DEFINED_STRING); // Tas pats kaip auksciau.     DoSomething(ALLOCATED_STRING); // Naudojamas jau sukurtas masyvas ALLOCATED_STRING.}[/pawn]
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests