C Preprocesor a makrá

V tomto výučbe sa zoznámite s preprocesormi c a pomocou príkladov sa naučíte používať # zahrnúť, # definovať a podmienenú kompiláciu.

Preprocesor C je preprocesor makier (umožňuje vám definovať makrá), ktorý transformuje váš program pred jeho kompiláciou. Tieto transformácie môžu byť zahrnutie hlavičkového súboru, rozšírenia makier atď.

Všetky smernice o predbežnom spracovaní sa začínajú #symbolom. Napríklad,

 #define PI 3.14

Niektoré z bežných použití preprocesora C sú:

Vrátane hlavičkových súborov: # zahrnúť

#includePreprocesoru sa používa pre zahrnutie hlavičkové súbory C programy. Napríklad,

 #include 

Tu stdio.hje hlavičkový súbor. #includeSmernica preprocesor nahradí vyššie uvedený riadok s obsahom stdio.hsúboru hlavičky.

To je dôvod, prečo musíte používať #include skôr, ako budete môcť používať funkcie ako scanf()a printf().

Môžete tiež vytvoriť svoj vlastný súbor hlavičky obsahujúci deklaráciu funkcie a zahrnúť ho do svojho programu pomocou tejto preprocesorovej smernice.

 #include "my_header.h"

Na tejto stránke nájdete ďalšie informácie o používaní hlavičkových súborov.

Makrá používajúce #define

Makro je fragment kódu, ktorý je pomenovaný. Makro môžete definovať v jazyku C pomocou #definesmernice preprocesora.

Tu je príklad.

 #define c 299792458 // speed of light

Tu, keď v našom programe použijeme c, je nahradené 299792458.

Prí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ú ako makrá

Môžete tiež definovať makra, ktoré fungujú podobným spôsobom ako volanie funkcie. Toto sa označuje ako funkčné makrá. Napríklad,

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

Zakaždým, keď sa program stretne circleArea(argument), je nahradený (3.1415*(argument)*(argument)).

Predpokladajme, že sme 5 prešli ako argument, potom sa rozšíri takto:

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

Príklad 2: Použitie #define preprocesora

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

Navštívte túto stránku a dozviete sa viac o makrách a #define preprocesore.

Podmienená kompilácia

V programovaní C môžete preprocesorovi dať pokyn, či má alebo nemá obsahovať blok kódu. Môžu sa na to použiť podmienené smernice.

Je to podobné ako ifvyhlásenie s jedným zásadným rozdielom.

Príkaz ifsa testuje počas doby vykonávania, aby sa skontrolovalo, či sa má blok kódu vykonať alebo nie, zatiaľ čo podmienky sa používajú na zahrnutie (alebo preskočenie) bloku kódu do vášho programu pred vykonaním.

Použitie podmienečne

  • použite iný kód v závislosti od stroja, operačného systému
  • skompilovať rovnaký zdrojový súbor do dvoch rôznych programov
  • vylúčiť z programu určitý kód, ale ponechať si ho ako referenciu pre budúce účely

Ako používať podmienené?

Ak chcete použiť podmienený, #ifdef, #if, #defined, #elsea #elseifsú použité direktívy.

#ifdef smernice

 #ifdef MACRO // conditional codes #endif 

Tu sú podmienené kódy zahrnuté do programu, iba ak je definované MACRO.

#if, #elif a #else

 #if expression // conditional codes #endif 

Výraz je tu výrazom celočíselného typu (môžu to byť celé čísla, znaky, aritmetický výraz, makrá atď.).

Podmienené kódy sú do programu zahrnuté iba vtedy, ak je výraz vyhodnotený na nenulovú hodnotu.

Voliteľnú #elsesmernicu je možné použiť so #ifsmernicou.

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

Môžete tiež pridať vnorené podmienené pre vaše #if… #elsepoužitie#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 

# definované

Špeciálny operátor #defined sa používa na testovanie, či je určité makro definované alebo nie. Často sa používa so smernicou #if.

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

Preddefinované makrá

Tu je niekoľko preddefinovaných makier v programovaní v jazyku C.

Makro Hodnota
__DATE__ Reťazec obsahujúci aktuálny dátum
__FILE__ Reťazec obsahujúci názov súboru
__LINE__ Celé číslo predstavujúce číslo aktuálneho riadku
__STDC__ Ak sa riadi štandardom ANSI C, potom je hodnota nenulové celé číslo
__TIME__ Reťazec obsahujúci aktuálny dátum.

Príklad 3: Získajte aktuálny čas pomocou __TIME__

Nasledujúci program zobrazuje aktuálny čas pomocou __TIME__makra.

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

Výkon

 Aktuálny čas: 19:54:39

Odporúčané čítania

  • Riadenie linky
  • Pragmas
  • Výstup preprocesora
  • Ostatné smernice

Zaujímavé články...