C Forprocessor og makroer

I denne vejledning vil du blive introduceret til c preprocessorer, og du vil lære at bruge #include, #define og betinget kompilering ved hjælp af eksempler.

C-forprocessoren er en makroforprocessor (giver dig mulighed for at definere makroer), der omdanner dit program, før det kompileres. Disse transformationer kan være inkludering af header-fil, makroudvidelser osv.

Alle forbehandlingsdirektiver begynder med et #symbol. For eksempel,

 #define PI 3.14

Nogle af de almindelige anvendelser af C preprocessor er:

Inkluderet headerfiler: #include

Den #includePræprocessoren bruges til at inkludere header filer til C-programmer. For eksempel,

 #include 

Her stdio.her en headerfil. Den #includedirektiv Præprocessoren erstatter ovenstående linje med indholdet af stdio.hheader-fil.

Det er grunden til, at du skal bruge, #include før du kan bruge funktioner som scanf()og printf().

Du kan også oprette din egen headerfil indeholdende funktionserklæring og medtage den i dit program ved hjælp af dette præprocessordirektiv.

 #include "my_header.h"

Besøg denne side for at lære mere om brug af headerfiler.

Makroer ved hjælp af #define

En makro er et fragment af kode, der får et navn. Du kan definere en makro i C ved hjælp af #defineforprocessordirektivet.

Her er et eksempel.

 #define c 299792458 // speed of light

Her, når vi bruger c i vores program, erstattes det med 299792458.

Eksempel 1: #definer preprocessor

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

Funktion som makroer

Du kan også definere makroer, der fungerer på samme måde som et funktionsopkald. Dette er kendt som funktionslignende makroer. For eksempel,

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

Hver gang programmet møder circleArea(argument), erstattes det af (3.1415*(argument)*(argument)).

Antag, vi bestod 5 som et argument derefter, det udvides som nedenfor:

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

Eksempel 2: Brug #define preprocessor

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

Besøg denne side for at lære mere om makroer og #define preprocessor.

Betinget kompilering

I C-programmering kan du instruere forprocessoren, om du skal medtage en blok kode eller ej. For at gøre dette kan betingede direktiver anvendes.

Det ligner en iferklæring med en større forskel.

Det ifudsagn testes under udførelsen tid til at kontrollere, om en blok af kode skal udføres eller ej henviser til, at der bruges de betingede til at omfatte (eller springe) en blok af kode i dit program før gennemførelse.

Anvendelse af betinget

  • Brug en anden kode afhængigt af maskinen, operativsystemet
  • kompilere den samme kildefil i to forskellige programmer
  • at udelukke bestemte koder fra programmet, men at beholde den som reference til fremtidige formål

Hvordan bruges betinget?

For at bruge betinget, #ifdef, #if, #defined, #elseog #elseifbruges direktiver.

#ifdef-direktivet

 #ifdef MACRO // conditional codes #endif 

Her er de betingede koder kun inkluderet i programmet, hvis MACRO er defineret.

#if, #elif og #else-direktivet

 #if expression // conditional codes #endif 

Her er udtryk et udtryk af heltalstype (kan være heltal, tegn, aritmetisk udtryk, makroer og så videre).

De betingede koder er kun inkluderet i programmet, hvis udtrykket vurderes til en værdi, der ikke er nul.

Det valgfri #elsedirektiv kan bruges sammen med #ifdirektivet.

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

Du kan også tilføje indlejrede betingede til din #if… #elsebrug#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 

#defineret

Den specielle operator #defined bruges til at teste, om en bestemt makro er defineret eller ej. Det bruges ofte med #if-direktivet.

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

Foruddefinerede makroer

Her er nogle foruddefinerede makroer i C-programmering.

Makro Værdi
__DATE__ En streng, der indeholder den aktuelle dato
__FILE__ En streng, der indeholder filnavnet
__LINE__ Et heltal, der repræsenterer det aktuelle linjenummer
__STDC__ Hvis følger ANSI-standard C, så er værdien et ikke-nul heltal
__TIME__ En streng, der indeholder den aktuelle dato.

Eksempel 3: Få aktuel tid ved hjælp af __TIME__

Det følgende program udsender den aktuelle tid ved hjælp af __TIME__makro.

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

Produktion

 Aktuel tid: 19:54:39

Anbefalede målinger

  • Linjekontrol
  • Pragmas
  • Preprocessor output
  • Andre direktiver

Interessante artikler...