Co je podmíněná kompilace?
V počítačovém programování podmíněná kompilace popisuje schopnost softwarového kompilátoru nebo procesoru zdrojového kódu zahrnout nebo ignorovat určité příkazy nebo bloky kódu na základě pokynů specifických pro jazyk, které nejsou technicky součástí specifikace základního programovacího jazyka. Příkazy, které se používají ke spouštění podmíněného kompilace v programu, se často nazývají direktivy před procesorem, ačkoli mohou být také známy jako direktivy kompilátoru, podmíněné komentáře nebo podmíněné definice. V závislosti na použitém kompilátoru nebo jazyce mohou být podmíněné direktivy uživatelem definované proměnné nebo makra, nebo to mohou být také systémové proměnné nastavené kompilátorem nebo operačním systémem. Podmíněné kompilace se často používá ke konfiguraci jedné sady souborů zdrojových kódů, takže je lze kompilovat v různých prostředích nebo operačních systémech bez nutnosti výměny nebo změny zdrojových souborů.
Podmíněné definice, které se používají k testování podmíněné kompilace, se mohou lišit od jednoho jazyka do druhého, ale obecně se jedná o makra nebo jiné výrazy metadat mimo rozsah běžných programových proměnných. V jazycích, jako je C, jsou proměnnými obvykle makra, která jsou čtena předprocesorem. Makra nejsou většinou přístupná prostřednictvím skutečného spustitelného zdrojového kódu programu, přestože existují ve stejných zdrojových souborech.
Direktivy, které se používají k testování definovaných podmíněných proměnných, jsou základní a sledují stejnou logiku jako příkaz if-then. Základní testy, které lze provést pro podmíněné kompilace, jsou to, zda je hodnota definována, není definována, nebo v některých případech, zda jsou dvě definované proměnné ekvivalentní. Proměnné nebo makra sama o sobě obecně nemají žádnou významnou hodnotu, protože aktem jejich definice je to, co směrnice kontrolují. U některých jazyků a kompilátorů však záleží na hodnotě definované proměnné, pokud jsou vyhodnoceny pro booleovský stav.
Když kompilátor narazí na direktivy použité pro podmíněné kompilace, vyhodnocují se direktivy, aby zjistily, zda testují jako pravdivé nebo nepravdivé. Pokud je pravda, kód, který následuje směrnici, je kompilován jako normální; v opačném případě kompilátor úplně přeskočí kód obsažený v této směrnici. To je na rozdíl od podmíněných logických příkazů v samotném spustitelném programovém kódu, protože i když má logika blok kódu, který nelze provést, bude ve většině případů stále interpretován a kompilován. U podmíněných direktiv před procesorem není přeskočený kód nikdy zahrnut, interpretován nebo kompilován. Je třeba také poznamenat, že jakmile pre-procesor vyhodnotí všechny podmíněné proměnné a direktivy, nebudou zkompilovány se zbytkem programu, protože jsou určeny pouze k tomu, aby poskytovaly směr kompilátoru.
Podmíněné kompilace se nejčastěji používá k zahrnutí nebo vyloučení kódu, který je specifický pro konkrétní operační systém nebo prostředí. To znamená, že knihovny existující v jednom operačním systému mohou být podmíněně zahrnuty, pokud směrnice určují, že program je kompilován pod tímto operačním systémem. Příkazy lze také alternativně použít k zahrnutí nebo vyloučení kódu založeného na uživatelsky definovaných proměnných. To lze provést tak, aby ladicí nebo profilovací kód nebyl zahrnut do konečné verze programu, nebo tak určité funkce lze povolit nebo zakázat, aniž byste museli udržovat oddělené kopie kódu.