Preprocesor: Porovnání verzí
Smazaný obsah Přidaný obsah
m opraven odkaz na jazyk ALGOL - vedl na hvězdu značky: první editace editace z Vizuálního editoru |
m Robot: -zastaralá značka HTML; kosmetické úpravy |
||
Řádek 1:
'''Preprocesor''' je [[počítačový program]], který zpracovává vstupní data tak, aby výstup mohl dále zpracovávat jiný program. Preprocesor je často používán pro předzpracování [[zdrojový kód|zdrojového kódu]] před vlastní [[Překladač|kompilací]]. Druh a míra předzpracování závisí zejména na schopnostech preprocesoru. Většina preprocesorů je relativně jednoduchá, zvládá nahrazování textu a jednoduchá [[Makro (software)|makra]]. Existují též sofistikované preprocesory, případně plně rozvinuté [[
Některé programovací jazyky (například [[C (programovací jazyk)|jazyk C]]) vždy používají preprocesor ve fázi, která se nazývá ''preprocesing''.
Řádek 11:
==== Připojení externích souborů ====
Preprocesoru v jazyce C/C++ se nejčastěji používá pro připojení [[Hlavičkový soubor|hlavičkových souborů]].
<
nebo
<
Rozdíl mezi těmito příkazy je v umístění, kde bude preprocesor zadaný soubor hledat. „…“ značí lokální hlavičkový soubor v projektu. <…> znamená soubor umístěný v některém společném úložišti hlavičkových souborů pro všechny projekty.
Na ukázku, připojení souborů <code><[[math.h]]></code> a <code><[[stdio.h]]></code> ze standardní C/C++ knihovny umožňuje využívat matematické a I/O operace.
Řádek 25:
Na ukázku:
<
definuje makro <tt>max</tt> se dvěma parametry <tt>a</tt> a <tt>b</tt>. Takovéto makro může být „voláno“ jako funkce (stejnou syntaxí).
Využití maker je v C/C++ velmi významné hlavně při ladění, kdy je možné rychle předefinovat makro a měnit tak kód na mnoha místech zároveň.
To, že se makra nechovají stejně jako funkce si ukážeme na následujícím příkladu, kde <tt>f</tt> a <tt>g</tt> jsou dvě funkce vracející integer. Zavolání <
nevyčíslí <tt>f()</tt>jednou a <tt>g()</tt> taky jednou jak by se dalo čekat u funkce, nýbrž jedna z funkcí <tt>f</tt> nebo <tt>g</tt> bude vyčíslena dvakrát (v závislosti na tom, která vrací větší číslo). Toto chování může mít za následek katastrofální chování v případě, že záleží na počtu volání <tt>f</tt> nebo <tt>g</tt>.
Řádek 38:
Nejčastěji se používá následující konstrukce:
<
#ifndef SOUBOR_H
#define SOUBOR_H
…(zdrojový kód hlavičkového souboru)…
#endif
</syntaxhighlight>
Programátor tím zabraňuje mnohonásobnému připojení hlavičkového souboru. Tímto problémem jsme se zabývali výše.
Podmíněný překlad je možné využít v komplexnějších případech jako je tento:
<
#ifdef DEBUG
…
Řádek 53:
…
#endif
</syntaxhighlight>
nebo
<
#if DEBUG
…
Řádek 61:
…
#endif
</syntaxhighlight>
Většina moderních programovacích jazyků odstraňuje tuto schopnost a uchyluje se k tradičnímu použití <code>if…then…else…</code>. To má za následek pomalejší běh programu, neboť podmínka musí být vyhodnocena za běhu programu a nikoliv pouze při kompilaci.
|