Úvod do směrnic o předprocesorech v C

Nejčastěji se jedná o mylnou představu, že předprocesory nebo makra jsou součástí kompilace programu, ale je to úplně špatně. Direktivy preprocesoru jsou typ makra a fáze před kompilací. Lze říci, že se jedná o několik pokynů vydaných kompilátoru, aby provedl skutečnou kompilaci. Oni jsou také známí jako delší konstrukční zkratky pro makra, což znamená, že hodnota v makrech je nahrazena segmentem kódů. Makro je definováno speciálním symbolem a má symbol začínající na „#“. Proto tyto # define je druh speciálního preprocesoru následovaný skutečným kompilátorem. V tomto tématu se dozvíme o směrnicích o předprocesorech v C.

Preprocesor má zvláštní typ reprezentace pro svou identifikaci, jako každá směrnice preprocesoru iniciuje speciální symbol „#“ následovaný identifikátorem a poté názvem direktivy. Mezera je také povolena před a za #. Například # include.

Existují určitá vybavení nebo zařízení, která může C Preprocesor poskytnout:

  • Soubory záhlaví: Zahrnutí záhlaví souborů je způsob, kterým lze deklarace nahradit syntaxí programu a tělem programu.
  • Rozšíření makra: Definování makra je jako zkrácení části kódu, který preprocesor C nahradí makra jejich příslušnou definicí v celém textu.
  • Kompilace podle podmínek: Podle různých scénářů nebo různých podmínek je zahrnutí určitých částí programu možné podmíněným kompilací.
  • Řádkové řízení: Pokud používáte program pro kombinování nebo přeskupení někoho nebo více zdrojových souborů do mezilehlého souboru pro kompilaci, můžete použít řádkové ovládání k informování kompilátoru o tom, odkud každá zdrojová linie pochází.

Druhy směrnic o předprocesorech

Všechny typy směrnic o předprocesorech jsou následující:

  1. # define
  2. # zahrnout
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # pokud
  7. #jiný
  8. #elif
  9. #endif
  10. #chyba
  11. #pragma

1. #define (Makra)

Makro je fragment kódu, který je nahrazen nějakou hodnotou kódu makra. Jakékoli makro je většinou popsáno a definováno svou #define direktivou.

Syntax:

#define token value

Existují dva typy maker:

  • Funkční makra
  • Objektová makra
Funkční makra

Funkce jako makro funguje téměř jako volání funkce.

Například:

#define MAX(a, b) ((a)>(b) ? (a): (b))

MAX je zde název makra.

Příklad:

Výstup:

Objektová makra

Objektová makra jsou typ identifikátoru nahrazený hodnotou. To je většinou používáno reprezentovat numerické konstanty.

#define PI 3.1415

Zde bude hodnota PI nahrazena makrem.


Výstup:

2. #include

Pro direktivu zahrnout preprocesor existuje ještě další funkce. Má své tři varianty, které nahrazují kód aktuálním kódem zdrojových souborů.

Tři varianty jsou následující:

  • #zahrnout
  • #include ”file”
  • Zahrnout cokoli jiného

#zahrnout

Hledá soubor v definovaném seznamu systému nebo adresářů, jak je uvedeno, poté hledá standardní seznam systémových knihoven.

#include ”file”

Tento typ se používá pro vlastní přizpůsobené soubory záhlaví programu. Hledá se soubor s názvem souboru nejprve v aktuálním adresáři, následovaný soubory hlavičky systému a aktuální adresáře aktuálního souboru adresáře.

# nezahrnujte cokoli

Tento typ direktivy pro zahrnutí preprocesoru se používá, když žádný ze zbývajících dvou typů direktivy a její argumenty se nehodí a nesplňují výpočetní strukturu.

3. #Ifdef

Zkontroluje, zda je makro definováno pomocí # define nebo ne. Pokud ano, provede kód, jinak ne.

Syntax:

#ifdef MACRO
(
Code body
)
#endif
#undef:

Zrušení definice makra znamená, že není definováno a předchází direktiva #undef.

Syntax:

#undef token

Výstup:

4. Ifndef

Tento procesor zkontroluje, zda #define je nebo není definován #define. Pokud ano, provede kód.

Syntax:

#Ifndef MACRO
//code
#endif
#If

Tento procesor funguje pouze jako smyčka if, vyhodnocuje výraz nebo podmínku. Je-li podmínka id true, provede kód jinak.

Syntax:

#if expression
//code
#endif
#else

Směrnice #else preprocesor se používá k vyhodnocení výrazu nebo podmínky, pokud je podmínka #if nepravdivá. Lze použít s direktivami #if, #elif, #ifdef a #ifndef.

Syntax:

#if expression
//if body
#else
//else body
#endif

Příklad:

Výstup:

5. # Chyba

Jak již název napovídá, na indikaci chyby se používá direktiva preprocesoru Error, a pak kompilátor vydá závažnou chybu, pokud je nalezena direktiva chyby a přeskočí další kroky kompilace.

Výstup:

6. #pragma

Závisí to na kompilátoru, protože různé operační systémy a různé stroje poskytují všechny typy funkcí operačního systému, které kompilátor používá k poskytování doplňkových informací kompilátoru.

Syntax:

#pragma token

Příklad:

Výstup:

Každý předprocesor má svůj vlastní význam, protože podmíněná směrnice se používá ke kontrole, zda má být část programu zohledněna na základě scénářů nebo ne.

Předpokládejme, že se program chce zkompilovat ve specifikovaném prostředí se specifickou konfigurací operačního systému, ale jakmile přejde do této fáze kompilace, vyvolá chybu nebo může dát neplatný kód pouze tím, že dává programu možnost velkého ne propojit program a spustit jej při provádění. Může existovat i jiná možnost, kde stejný zdrojový soubor se dvěma různými programy může provádět časově náročnou kontrolu konzistence nebo její okamžitá data nebo tisknout hodnoty dat s laděním.

Tyto scénáře, které mají být vytvořeny výpočtem, lze také použít ke spuštění na jednom počítači pomocí směrnic pro předzpracování.

Závěr

Výstup z předprocesoru C vypadá podobně jako vstup, kromě toho, že všechny směrnice o předzpracování byly nahrazeny prázdnými řádky nebo mezerami. Různé soubory a formáty mají různé syntaxe, které říkají, že byl proveden začátek nového souboru, nebo naznačují návrat do souboru nebo zpracování by mělo být provedeno před kompilací.

Všechny scénáře se používají k tomu, aby ostatní věděli, jaký je výkon preprocesoru C a jak se vyvíjí s různými verzemi kompilátoru, které začaly standardy GCC a ANSI.

Doporučené články

Toto je průvodce směrnicemi o předprocesorech v C. Zde diskutujeme typy směrnic o předprocesorech se syntaxí a příklady. Další informace naleznete také v následujících článcích.

  1. Reverzní číslo v C
  2. Třídění v C.
  3. Hashing funkce v C
  4. Pokračovat v C
  5. Třídění v C #
  6. Jak funguje hashovací funkce v php?

Kategorie: