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úť
#include
Preprocesoru sa používa pre zahrnutie hlavičkové súbory C programy. Napríklad,
#include
Tu stdio.h
je hlavičkový súbor. #include
Smernica preprocesor nahradí vyššie uvedený riadok s obsahom stdio.h
sú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 #define
smernice 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 if
vyhlásenie s jedným zásadným rozdielom.
Príkaz if
sa 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
, #else
a #elseif
sú 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ú #else
smernicu je možné použiť so #if
smernicou.
#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… #else
použ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