Podmφn∞n² p°eklad

Podmφn∞n² p°eklad znamenß, ₧e n∞kterΘ Φßsti programu uzav°enΘ mezi direktivami, se p°eklßdajφ pouze p°i spln∞nφ urΦit²ch podmφnek. Podmφn∞n² p°eklad se vyu₧φvß tehdy, kdy₧ je pot°eba mφt v jednom zdrojovΘm programu vφce variant chovßnφ. Direktivy °φdφcφ podmφn∞n² p°eklad vytvß°ejφ v programu takovΘho struktury:

#if podmφnka1
... sekce A ...
#elif podmφnka2
... sekce B ...
#else 
... sekce C ...
#endif

Ze sekcφ programu umφst∞n²ch mezi direktivami se p°elo₧φ pouze (nebo nejv²Üe) jedna, p°iΦem₧ ka₧dß sekce m∙₧e b²t tvo°ena libovoln²m poΦtem °ßdek programu. Je-li spln∞na podmφnka1, p°elo₧φ se sekce A. Pokud podmφnka1 nenφ spln∞na a je spln∞na podmφnka2, p°elo₧φ se sekce B. Jinak se p°elo₧φ sekce C. Direktiva elif a nßsledujφcφ sekce B se m∙₧e opakovat libovoln² poΦet krßt, p°elo₧φ se sekce nßsledujφcφ za prvnφ spln∞nou podmφnkou. Direktivy elif a else a za nimi nßsledujφcφ sekce B resp. C se nemusφ pou₧φt v∙bec. Nenφ-li pou₧ita direktiva else, pak nenφ-li spln∞na ₧ßdnß podmφnka, nep°elo₧φ se ₧ßdnß sekce.

Podmφnka smφ mφt jeden ze t°φ tvar∙:

V podmφnce se sm∞jφ vyskytovat takΘ identifikßtory definovanΘ direktivou define.

P°φklad:

//#define STATUS "DEMO"
#define STATUS "VYVOJ"

#if STATUS = "VYVOJ"
  Info_box("","v²voj");
#elif STATUS = "DEMO"
  Info_box("","demo");
#else
  Info_box("","norm");
#endif

Krom∞ direktivy if lze pro zahßjenφ podmφn∞nΘho p°ekladu pou₧φt takΘ direktivy:

#ifdef ident - podmφnka je spln∞na, pokud je ident definovßn direktivou define,

#ifndef ident - podmφnka je spln∞na, pokud ident nenφ definovßn direktivou define.

Konstrukce podmφn∞nΘho p°ekladu lze do sebe libovoln∞ zano°ovat bez omezenφ hloubky.

P°φklad:

Procedure V²poΦet;
begin
#ifdef LAD╠N═
  Info_box("Lad∞nφ", "ZaΦßtek procedury V²poΦet");
#endif
.....

╪ßdek obsahujφcφ volßnφ procedury Info_box se p°elo₧φ pouze tehdy, pokud je d°φve v programu uvedena direktiva

#define LAD╠N═
Viz takΘ: KompilaΦnφ direktivy a makra