Preprocesor: Porovnání verzí
Smazaný obsah Přidaný obsah
m napřímení odkazu |
m typo |
||
Řádek 19:
Zmíněný lexikální preprocesor není schopný sám ohlídat vícenásobné připojení jednoho hlavičkového souboru nebo dokonce cyklické připojování hlavičkových souborů. Mnohonásobné připojení musí v tomto případě ohlídat programátor za pomocí podmíněného překladu. Mimo jiné je tento přístup pomalý, neboť je nutné před každou kompilací připojovat hlavičkové soubory i když se v nich nic nezměnilo.
Od roku 1970, bylo vymyšleno mnoho alternativ hlavičkových souborů z jazyka C/C++. Tyto alternativy jsou mnohdy efektivnější, rychlejší a použití je přehlednější. Vybrané implementace sdílených souborů: [[Java (programovací jazyk)|Java]] a [[Common Lisp]] používají balíčky, [[Pascal (programovací jazyk)|Pascal]] má unity, [[Modula-2|Modula]], [[OCaml]], [[Haskell (programovací jazyk)|Haskell]] a [[Python]] mají moduly a [[C Sharp|C#]] využívá importy
==== Makra ====
Makra jsou primárně používána v jazyce C. Umožňují vkládat drobné části kódu na mnoho míst, čímž se šetří velikost zdrojového kódu a přehlednost. V makrech je možné používat i zástupné znaky (něco jako parametry funkcí). Makra jsou zpracovávána preprocesorem, proto je tento kód
Na ukázku:
<source lang="c">#define max(a,b) a > b ? a : b</source>
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
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í <source lang="c">z = max(f(), g());</source>
Řádek 46:
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
<source lang="c">
#ifdef DEBUG
Řádek 73:
Pěkný příklad naleznete na internetové adrese http://caml.inria.fr/pub/docs/manual-camlp4/manual007.html. Program může být zapsán dvěma různými syntaxemi při zachování stejné funkčnosti a záleží hlavně na subjektivním posouzení programátorem.
Velký počet programů napsaných v [[OCaml]]
=== Specializace jazyka ===
|