Makro (software): Porovnání verzí

Přidáno 543 bajtů ,  před 7 lety
m (narovnání přesměrování)
 
== Programování ==
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 = [[Portable Document Format|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> Použití makra také může ušetřit režii spojenou s voláním funkce. Nevýhodou je slabší typová kontrola a případné vedlejší efekty při nesprávném použití maker. Z tohoto důvodu se doporučuje upřednostňovat před makry inline-funkce.
 
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říkladV mnoha implementacích c-jazyka je v [[Linux|Linuxupreprocesor]] lzeC-jazyka implementován jako samostatný program, v operačním spustitsystému [[preprocesorLinux|Linux]] příkazemjej lze obvykle volat pod názvem cpp (C Pre Processor). FungujeTento toprogram taknahrazuje ve zdrojovém kóduidentifikátor makra jeho obsahem, žetj. rozvojem textu makra. Při rozvoji makra se přiv textu makra provádí každémsubstituce výskytuformálních identifikátoruparametrů makra veza zdrojovémtexty kóduuvedené nahradív závorce při textemvolání makra.
 
[[Preprocesor]] sije zavolávolán [[překladač|překladačem]] sám, takže onebo tomje anipřímo nemusítejeho vědětsoučástí. [[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]] <code>#include <stdio.h></code>, pak [[preprocesor]] vloží na místo tohoto řádku obsah[[Hlavičkový soubor|hlavička]] standardní [[Knihovna (programování)|knihovny]] <code><stdio.h></code>. Všechny direktivy [[Preprocesor|preprocesoru]] C-jazyka začínají znakem #.
 
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 [[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;"
|+ makraMakra, která musí každýznát preprocesor znát.C-jazyka
|-
! scope="col" | Makro
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 <code>__linux__</code> 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;"
|+ implementačněImplementačně závislá makra. C-jazyka
|-
! scope="col" | Makro
772

editací