Makro (software): Porovnání verzí
Smazaný obsah Přidaný obsah
Řádek 7:
V programovacích jazycích ([[C (programovací jazyk)|jazyk C]] nebo [[C++]]) jsou makra nepostradatelnou pomůckou, která je implementována na úrovni [[Preprocesor jazyka C|preprocesoru jazyka C]] (cpp). Makra slouží k definování symbolů využitelných při podmíněném překladu, ale i k definování komplikovaných sekvencí, které jsou následně volány v zápisu [[Zdrojový kód|zdrojového kódu]]. Výhodou maker je, že jejich předefinováním se při překladu zdrojového kódu automaticky zamění všechny jejich výskyty, což minimalizuje chyby, které by přinesly mnohanásobné editace kódu.<ref>{{Citace periodika | příjmení = Greenwald | jméno = Irwin D. | coauthors = Maureen Kane | titul = The Share 709 System: Programming and Modification | periodikum = Journal of the ACM | ročník = 6 | číslo = 2 | strany = 128–133 | vydavatel = ACM | místo = New York, NY, USA | datum vydání = April 1959 | url = http://doi.acm.org/10.1145/320964.320967 | formát = [[PDF]] | doi = 10.1145/320964.320967 <!--Retrieved from URL by DOI bot-->}} Quotation: "One of the important uses of programmer macros is to save time and clerical-type errors in writing sequence of instructions which are often repeated in the course of a program."</ref><ref>{{Citace periodika | příjmení = Strachey | jméno = Christopher | titul = A General Purpose Macrogenerator| periodikum = Computer Journal| ročník = 8 | číslo = 3 | strany = 225–241| datum=October 1965 | doi = 10.1093/comjnl/8.3.225}}</ref>
Makra jsou texty, které se dají představit jako zdrojové kódy. Ovšem jako se zdrojovými kódy se s nimi pracuje až po zpracování preprocesoru. Například v Linuxu lze spustit preprocesor příkazem cpp (C Pre Processor). Funguje to tak, že se při každém výskytu identifikátoru makra ve zdrojovém kódu nahradí textem makra.
Existují dva typy maker:▼
Preprocesor si zavolá překladač sám, takže o tom ani nemusíte vědět. Preprocesor odstraní ze zdrojového kódu komentáře a nahradí makra, které jsou ve zdrojovém kódu. Například když zapíšete do zdrojového kódu #include <stdio.h>, pak preprocesor vloží na místo tohoto řádku obsah standardní knihovny <stdio.h>. Všechny direktivy preprocesoru začínají znakem #.
Direktiva preprocesoru musí být vždy první na novém řádku. Před ní mohou být maximálně jen „bílé znaky“ (tabulátor, mezera, …). Direktiva končí s koncem řádku. Pokud chcete pokračovat na novém řádku, pak před „konec řádku“ napište zpětné lomítko.
Podle normy ANSI C existují následující makra, které musí každý preprocesor jazyka C znát. Standardní makra preprocesoru začínají a končí dvěma podtržítky.
{| class="wikitable" style="text-align: center; width: 500px; height: 200px;"
|+ makra, která musí každý preprocesor znát.
|-
! scope="col" | Makro
! scope="col" | význam
! scope="col" | datový typ
|-
! scope="row" | __cplusplus__
| Určuje, zda byl použit překladač C++ || int (1 nebo 0)
|-
! scope="row" | __STDC__
| Určuje, zda překladač splňuje ANSI C || int (1 nebo 0)
|-
! scope="row" | __LINE__
| Pořadové číslo aktuálního řádku || int
|-
! scope="row" | __FILE__
| Jméno aktuálního vstupního souboru || string
|-
! scope="row" | __TIME__
| Čas spuštění preprocesoru || string
|-
! scope="row" | __DATE__
| Datum spuštění preprocesoru || string
|}
Existují i implementačně závislá makra, která jsou definována jen na některých OS a v některých preprocesorech jazyka C. Například makro __linux__ se může hodit ke zjištění, zda program překládáme v linuxu.
{| class="wikitable" style="text-align: center; width: 500px; height: 200px;"
|+ implementačně závislá makra.
|-
! scope="col" | Makro
! scope="col" | význam
! scope="col" | datový typ
|-
! scope="row" | __linux__
| Určuje, zda je zdrojový kód překládán v Linuxu || int (1 nebo 0)
|-
! scope="row" | __unix__
| Obdobně jako linux || int (1 nebo 0)
|-
! scope="row" | __MSDOS__
| Verse DOSu || string
|-
! scope="row" | __i386__
| Určuje, zda jde o procesor z řady i386 || int (1 nebo 0)
|-
! scope="row" | __VERSION__
| Verze překladače GNU C || string
|}
Kromě standardních maker se dají vytvářet vlastní makra. Jejich užívání je velmi rozšířené, například je lze použít pro definování počtu prvků pole. Takové makro se pak používá v celém zdrojovém kódu a při změně počtu prvků pole stačí změnit jen makro. Makro se definuje za direktivou #define a lze jej zrušit direktivou #undef.
#define NAZEV makro
zdrojový kód kde makro používáme
#undef NAZEV
zde už makro není definované
1. makra bez parametrů
2. makra s parametry
|