Preprocesor jazyka C je makroprecesor (umožňuje definovat makra), který transformuje program před jeho kompilací. Těmito transformacemi může být začlenění hlavičkového souboru, rozšíření maker atd.

Všechny direktivy preprocesoru začínají symbolem #. Například,

#define PI 3.14

Některé z běžných použití preprocesoru jazyka C jsou:

Zapojení hlavičkových souborů: #include

Preprocesor #include se používá k začlenění hlavičkových souborů do programů v jazyce C. Například

#include <stdio.h>

Tady stdio.h je hlavičkový soubor. Direktiva preprocesoru #include nahradí výše uvedený řádek obsahem hlavičkového souboru stdio.h.

To je důvod, proč musíte před použitím funkcí jako scanf() a printf() použít #include <stdio.h>.

Můžete si také vytvořit vlastní hlavičkový soubor obsahující deklaraci funkce a začlenit jej do programu pomocí této direktivy preprocesoru.

#include "my_header.h"

Navštivte tuto stránku, kde se dozvíte více o používání hlavičkových souborů.

Makra pomocí #define

Makro je fragment kódu, který je pojmenován. Makro můžete v jazyce C definovat pomocí direktivy #define preprocesoru.

Tady je příklad.

#define c 299792458 // speed of light

Pokud v našem programu použijeme c, nahradí se 299792458.

Příklad 1. Ukázka: #define preprocessor

#include <stdio.h>#define PI 3.1415int main(){ float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0;}

Makra podobná funkci

Makra, která fungují podobně jako volání funkce, můžete také definovat. Jedná se o tzv. makra podobná funkci. Například

#define circleArea(r) (3.1415*(r)*(r))

Pokud se v programu setkáte s circleArea(argument), nahradí se (3.1415*(argument)*(argument)).

Předpokládejme, že jsme jako argument předali 5, pak se expanduje takto:

circleArea(5) expands to (3.1415*5*5)

Příklad 2: Použití preprocesoru #define

#include <stdio.h>#define PI 3.1415#define circleArea(r) (PI*r*r)int main() { float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0;}

Navštivte tuto stránku a dozvíte se více o makrech a preprocesoru #define.

Podmíněná kompilace

V programování v jazyce C můžete preprocesoru nařídit, zda má blok kódu zahrnout, nebo ne. K tomu lze použít podmíněné direktivy.

Je to podobné jako příkaz if s jedním zásadním rozdílem.

Příkaz if se testuje v průběhu provádění a kontroluje, zda se má blok kódu provést, nebo ne, zatímco podmíněné direktivy se používají k zařazení (nebo vynechání) bloku kódu do programu před jeho provedením.

Použití kondicionálu

  • použít různý kód v závislosti na stroji, operačním systému
  • kompilovat stejný zdrojový soubor ve dvou různých programech
  • vyřadit určitý kód z programu, ale ponechat ho jako odkaz pro budoucí účely

Jak používat kondicionál?

K použití podmíněného se používají direktivy #ifdef, #if, #defined, #else a #elseif.

#ifdef Směrnice

#ifdef MACRO // conditional codes#endif

Zde jsou podmíněné kódy zahrnuty do programu pouze v případě, že je definováno MACRO.

#if, #elif a #else Směrnice

#if expression // conditional codes#endif

Zde je výrazem výraz celočíselného typu (mohou to být celá čísla, znaky, aritmetický výraz, makra apod.).

Podmíněné kódy jsou do programu zahrnuty pouze v případě, že je výraz vyhodnocen na nenulovou hodnotu.

S direktivou #if lze použít nepovinnou direktivu #else.

#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif

Do #if...#else můžete také přidat vnořenou podmínku pomocí #elif

#if expression // conditional codes if expression is non-zero#elif expression1 // conditional codes if expression is non-zero#elif expression2 // conditional codes if expression is non-zero#else // conditional if all expressions are 0#endif

#defined

Speciální operátor #defined slouží k testování, zda je určité makro definováno, nebo ne. Často se používá s direktivou #if.

#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes

Předdefinovaná makra

Zde jsou uvedena některá předdefinovaná makra v programování v jazyce C.

Makro Hodnota
__DATE__ Řetězec obsahující aktuální datum
__FILE__ A. řetězec obsahující název souboru
__LINE__ Celé číslo představující aktuální číslo řádku
__STDC__ Pokud se řídí normou ANSI C, pak je hodnotou nenulové celé číslo
__TIME__ Řetězec obsahující aktuální datum.

Příklad 3: Získání aktuálního času pomocí __TIME__

Následující program vypíše aktuální čas pomocí makra __TIME__.

#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }

Výstup

Current time: 19:54:39

Doporučené čtení

  • Řízení řádků
  • Pragmy
  • Výstup z preprocesoru
  • Další direktivy

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.