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 |