Taigi #define ir const
Taigi #define ir const
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.
- aaarnas
- Vyr. diskusijų administratorius
- Posts: 3891
- Joined: 2010 Aug 31 13:21
- Skype: fiarno
- Contact:
Re: Taigi #define ir const
#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:
Sukompiliuotas kodas atrodys taip:
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.
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)
Code: Select all
set_user_health(id, 5)
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.
Re: Taigi #define ir const
[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]
Who is online
Users browsing this forum: No registered users and 4 guests