C Preprocesor a makra

V tomto kurzu se seznámíte s preprocesory c a pomocí příkladů se naučíte používat #include, #define a podmíněnou kompilaci.

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

Všechny směrnice pro předzpracování začínají #symbolem. Například,

 #define PI 3.14

Některá běžná použití preprocesoru C jsou:

Včetně souborů záhlaví: # zahrnout

#includePreprocesoru se používá pro zahrnutí hlavičkové soubory C programy. Například,

 #include 

Tady stdio.hje soubor záhlaví. #includeSměrnice preprocesor nahradí výše uvedený řádek s obsahem stdio.hsouboru záhlaví.

To je důvod, proč musíte použít, #include než budete moci používat funkce jako scanf()a printf().

Můžete také vytvořit svůj vlastní soubor záhlaví obsahující deklaraci funkce a zahrnout jej do svého programu pomocí této direktivy preprocesoru.

 #include "my_header.h"

Na této stránce najdete další informace o používání hlavičkových souborů.

Makra používající #define

Makro je fragment kódu, který dostal jméno. Makro v C můžete definovat pomocí #definedirektivy preprocesoru.

Zde je příklad.

 #define c 299792458 // speed of light

Tady, když v našem programu použijeme c, je nahrazeno 299792458.

Příklad 1: #define preprocesor

 #include #define PI 3.1415 int 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; )

Fungují jako makra

Můžete také definovat makra, která fungují podobným způsobem jako volání funkce. Toto se nazývá makra podobná funkcím. Například,

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

Pokaždé, když se program setká circleArea(argument), je nahrazen (3.1415*(argument)*(argument)).

Předpokládejme, že jsme předali 5 jako argument, poté se rozšíří níže:

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

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

 #include #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; )

Na této stránce najdete další informace o makrech a preprocesoru #define.

Podmíněná kompilace

V programování C můžete instruovat preprocesor, zda má obsahovat blok kódu nebo ne. K tomu lze použít podmíněné směrnice.

Je to podobné jako ifprohlášení s jedním zásadním rozdílem.

Příkaz ifje testován během doby provádění, aby se zkontrolovalo, zda by měl být spuštěn blok kódu, nebo ne, zatímco podmínky se používají k zahrnutí (nebo přeskočení) bloku kódu do vašeho programu před provedením.

Použití podmíněného

  • použijte jiný kód v závislosti na stroji a operačním systému
  • zkompilovat stejný zdrojový soubor do dvou různých programů
  • vyloučit určitý kód z programu, ale ponechat si jej jako referenci pro budoucí účely

Jak používat podmíněný?

Chcete-li použít podmíněný, #ifdef, #if, #defined, #elsea #elseifjsou použity direktivy.

#ifdef směrnice

 #ifdef MACRO // conditional codes #endif 

Zde jsou podmíněné kódy zahrnuty do programu, pouze pokud je definováno MACRO.

Směrnice #if, #elif a #else

 #if expression // conditional codes #endif 

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

Podmíněné kódy jsou do programu zahrnuty, pouze pokud je výraz vyhodnocen na nenulovou hodnotu.

Volitelnou #elsesměrnici lze použít se #ifsměrnicí.

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

K vašemu #if… #elsepoužití můžete také přidat vnořené podmíněné#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 

#definována

Speciální operátor #defined se používá 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 je několik předdefinovaných maker v programování v jazyce C.

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

Příklad 3: Získejte aktuální čas pomocí __TIME__

Následující program vygeneruje aktuální čas pomocí __TIME__makra.

 #include int main() ( printf("Current time: %s",__TIME__); )

Výstup

 Aktuální čas: 19:54:39

Doporučené četby

  • Ovládání linky
  • Pragmas
  • Výstup předprocesoru
  • Další směrnice

Zajímavé články...