Makro (software): Porovnání verzí
přidáno PHP |
|||
Řádek 7: | Řá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> |
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. |
Makra jsou texty, které se dají představit jako [[Zdrojový kód|zdrojové kódy]]. Ovšem jako se [[Zdrojový kód|zdrojovými kódy]] se s nimi pracuje až po zpracování [[Preprocesor|preprocesoru]]. Například v [[Linux|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. |
||
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 #. |
[[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ý kód|zdrojového kódu]] #include <stdio.h>, pak [[preprocesor]] vloží na místo tohoto řádku obsah standardní [[Knihovna (programování)|knihovny]] <stdio.h>. Všechny direktivy [[Preprocesor|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. |
Direktiva [[Preprocesor|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. |
Podle normy [[American National Standards Institute|ANSI]] C existují následující makra, které musí každý [[preprocesor]] jazyka C znát. Standardní makra [[Preprocesor|preprocesoru]] začínají a končí dvěma podtržítky. |
||
{| class="wikitable" style="text-align: center; width: 500px; height: 200px;" |
{| class="wikitable" style="text-align: center; width: 500px; height: 200px;" |
||
|+ makra, která musí každý preprocesor znát. |
|+ makra, která musí každý preprocesor znát. |
||
Řádek 40: | Řádek 40: | ||
|} |
|} |
||
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. |
Existují i implementačně závislá makra, která jsou definována jen na některých OS a v některých [[Preprocesor|preprocesorech]] jazyka C. Například makro __linux__ se může hodit ke zjištění, zda program překládáme v [[linux|linuxu]]. |
||
{| class="wikitable" style="text-align: center; width: 500px; height: 200px;" |
{| class="wikitable" style="text-align: center; width: 500px; height: 200px;" |
||
|+ implementačně závislá makra. |
|+ implementačně závislá makra. |
Verze z 3. 4. 2012, 22:44
Makro (od Řeckého slova "μακρό" -> "velké" nebo "daleko") je v informatice definice pravidla, jak bude vstupní posloupnost transformována na výstupní posloupnost (znaků, akcí, výpočtů a podobně). Tuto transformaci označujeme jako substituci nebo expanzi makra. Původní termín byl zaveden překladači jazyka symbolických adres, kde programátor může pomocí makra zaměnit dlouhou sekvenci příkazů jediným krátkým výrazem (makrem).
Kancelářský balík
V kancelářských balících (Microsoft Office, OpenOffice.org a podobně) označuje makro posloupnost akcí, funkcí nebo příkazů, které usnadňují určitou činnost (např. v programech Microsoft Word a Microsoft Excel). Používají se většinou jako posloupnost kroků při výpočtech, úpravách textu a podobně. Jednoduchým příkladem může být makro pro odstranění speciálních znaků tabulátor a odřádkování nebo makro aktivující určitou akci po stisknutí vybrané kombinace kláves.
Programování
V programovacích jazycích (jazyk C nebo C++) jsou makra nepostradatelnou pomůckou, která je implementována na úrovni 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é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.[1][2]
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.
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.
Makro | význam | datový typ |
---|---|---|
__cplusplus__ | Určuje, zda byl použit překladač C++ | int (1 nebo 0) |
__STDC__ | Určuje, zda překladač splňuje ANSI C | int (1 nebo 0) |
__LINE__ | Pořadové číslo aktuálního řádku | int |
__FILE__ | Jméno aktuálního vstupního souboru | string |
__TIME__ | Čas spuštění preprocesoru | string |
__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.
Makro | význam | datový typ |
---|---|---|
__linux__ | Určuje, zda je zdrojový kód překládán v Linuxu | int (1 nebo 0) |
__unix__ | Obdobně jako linux | int (1 nebo 0) |
__MSDOS__ | Verse DOSu | string |
__i386__ | Určuje, zda jde o procesor z řady i386 | int (1 nebo 0) |
__VERSION__ | Verze překladače GNU C | string |
Existují dva typy maker:
Makra bez parametrů
Používají se pro definici konstant, kdy se místo konstanty používá nějaké specifické slovo. Používané pravidlo v tomto případě je psát identifikátor makra bez parametru velkými písmeny. 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é
Zápis takového makra pak vypadá:
#define identifikator_makra text_vlozeneho_makra
Volání takového makra pak vypadá:
Identifikator_makra
Makra s parametry
Makra mohou mít také argumenty. Jsou uzavřeny v kulatých závorkách za jménem makra a pokud je více jak jeden argument, jsou odděleny čárkou. Mezi jménem makra a závorkou obsahující argumenty nesmí být mezera.
#define NAZEV(argument1, argument2, ...)
Obsahují formální parametry, se kterými se v textu makra dále pracuje. Často se používají namísto funkcí. Rozdíl mezi makry a funkcí je ten, že makra jsou rychlejší a za formální parametry mohou být načteny i hodnoty libovolných datových typů. Používané pravidlo je psát identifikátor malými písmeny.
Zápis takového makra pak vypadá:
#define identifikátor_makra(seznam formálních parametru) text_vlozeneho_makra
Volání takového makra pak vypadá:
identifikátor_makra(seznam skutečných parametrů)
Programování alternativních jazyků
Některé jazyky, jako třeba PHP, mohou být vloženy do libovolného textového formátu, nebo zdrojových kódů jiných jazyků. Mechanismus, kterým se rozpozná kód jazyka (např. v již zmíněném php: <?php a ?>) je podobný jako textové makro jazyka. Ale existují mnohem silnější plnohodnotné jazyky.
Reference
- ↑ GREENWALD, Irwin D. The Share 709 System: Programming and Modification. Journal of the ACM. New York, NY, USA: ACM, April 1959, roč. 6, čís. 2, s. 128–133. Dostupné online [PDF]. DOI 10.1145/320964.320967. 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."
- ↑ STRACHEY, Christopher. A General Purpose Macrogenerator. Computer Journal. October 1965, roč. 8, čís. 3, s. 225–241. DOI 10.1093/comjnl/8.3.225.