Definice maker

Pomocφ direktivy define lze definovat makra, tedy specifikovat, ₧e se v programu mß urΦit² identifikßtor nahrazovat jin²mi symboly. Direktiva ve tvaru:

#define ident rozvoj_makra

zp∙sobφ, ₧e od tohoto mφsta v programu se vÜechny v²skyty identifikßtoru ident nahradφ rozvojem makra, co₧ je posloupnost libovoln²ch symbol∙.

Definovat lze takΘ makro s parametry ve tvaru:

#define ident(par1, par2, ...)  rozvoj_makra

V tomto p°φpad∞ se makro volß s parametry takto:

ident(sp1, sp2, ...)

a toto volßnφ se nahradφ rozvojem makra, v n∞m₧ se ka₧d² v²skyt par1 nahradφ sp1, v²skyt par2 nahradφ sp2 atd. P°i volßnφ makra je nutno uvΘst stejn² poΦet parametr∙, jako v definici makra.

V makrech se nerozliÜuje mezi velk²mi a mal²mi pφsmeny. Makra bez parametr∙ se pou₧φvajφ zejmΘna p°φ °φzenφ podmφn∞nΘho p°ekladu. Pro oznaΦovßnφ konstantnφch hodnot je vhodn∞jÜφ pou₧φvat mφsto nich deklarace konstant. Makra s parametry zjednoduÜujφ zßpis opakujφcφch se programov²ch konstrukcφ.

Definici makra lze kdykoli zm∞nit tak, ₧e se pou₧ije novß direktiva #define pro stejn² identifikßtor. Definici lze zruÜit pomocφ direktivy:

#undef ident

P°φklad:

Budi₧ definovßno makro:

#define CHYBA(text) begin Info_box("Nastala chyba", text);  halt end

Pokud v textu programu pou₧ijete zßpis:

if i<0 then CHYBA("Nep°φpustnß vstupnφ hodnota");

p°elo₧φ se jako zßpis:

if i<0 then begin Info_box("Nastala chyba", "Nep°φpustnß vstupnφ hodnota");  halt end;

P°eddefinovanß makra

Ve vnit°nφm programovacφm jazyce jsou p°eddefinovßna tato makra:

_WINBASE602_ - hodnotou je °et∞zec obsahujφcφ Φφslo verze klienta WinBase602, v souΦasnΘ verzi je to "6.0". Ve d°φv∞jÜφch verzφch nenφ makro pou₧itelnΘ, nelze tedy rozliÜovat verze ni₧Üφ ne₧ 6.0! V budoucφch verzφch vÜak bude mo₧nΘ pomocφ tΘto direktivy p°eklßdat program pro r∙znΘ verze WinBase602.

_LANGUAGE_ - hodnotou je °et∞zec znak∙ obsahujφcφ nßzev zvolenΘho jazyka (jak jste si zvolili); pokud aplikace nenφ vφcejazyΦnß nebo pokud nenφ zvolen ₧ßdn² jazyk, pak je to prßzdn² °et∞zec

P°φklad:

#if _LANGUAGE_ = "english"
    PrepocetNaPalce;
#elif _LANGUAGE_ = "cestina"
    PrepocetNaMetry;
#endif
Viz takΘ: KompilaΦnφ direktivy a makra