C-præprocessoren er en makropræprocessor (giver dig mulighed for at definere makroer), der omdanner dit program, før det kompileres. Disse transformationer kan være inddragelse af headerfil, makroudvidelser osv.

Alle præprocesseringsdirektiver begynder med et #-symbol. For eksempel,

#define PI 3.14

Nogle af de almindelige anvendelser af C præprocessor er:

Inddragelse af headerfiler: #include

Preprocessoren #include bruges til at inkludere headerfiler i C-programmer. For eksempel,

#include <stdio.h>

Her er stdio.h en headerfil. Præprocessordirektivet #include erstatter ovenstående linje med indholdet af headerfilen stdio.h.

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

Du kan også oprette din egen headerfil med funktionsdeklaration og inkludere den i dit program ved hjælp af dette præprocessordirektiv.

#include "my_header.h"

Besøg denne side for at få mere at vide om brugen af headerfiler.

Makroer ved hjælp af #define

En makro er et kodefragment, der har fået et navn. Du kan definere en makro i C ved hjælp af præprocessordirektivet #define.

Her er et eksempel.

#define c 299792458 // speed of light

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

Eksempel 1: #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;}

Funktionslignende makroer

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

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

Hver gang programmet støder på circleArea(argument), erstattes det med (3.1415*(argument)*(argument)).

Sæt, vi har givet 5 som argument, så udvides det som nedenfor:

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

Eksempel 2: Brug af #define preprocessor

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

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

Conditional Compilation

I C-programmering kan du instruere preprocessor om, hvorvidt en blok kode skal inkluderes eller ej. Til det formål kan man bruge betingelsesdirektiver.

Det svarer til en if-anvisning med én væsentlig forskel.

if-anvisningen testes under eksekveringstiden for at kontrollere, om en kodeblok skal udføres eller ej, mens betingelsesdirektiverne bruges til at inkludere (eller springe over) en kodeblok i dit program før eksekvering.

Anvendelser af betinget

  • bruge forskellig kode afhængigt af maskine, operativsystem
  • kompilere samme kildefil i to forskellige programmer
  • at udelukke bestemt kode fra programmet, men at beholde den som reference til fremtidige formål

Hvordan bruger man betinget?

For at bruge conditional anvendes #ifdef, #if, #defined, #else og #elseif direktiverne #ifdef, #if, #defined, #else og #elseif.

#ifdef-direktivet

#ifdef MACRO // conditional codes#endif

Her indgår de betingede koder kun 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, aritmetiske udtryk, makroer osv.).

De betingede koder indgår kun i programmet, hvis udtrykket evalueres til en værdi, der ikke er nul.

Det valgfrie #else-direktiv kan bruges sammen med #if-direktivet.

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

Du kan også tilføje indlejrede betingelseskoder til din #if...#else ved hjælp af #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

Den særlige operatør #defined bruges til at teste, om en bestemt makro er defineret eller ej. Den bruges ofte sammen med #if-direktivet.

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

Predefinerede makroer

Her er nogle foruddefinerede makroer i C-programmering.

Makro Værdi
__DATE__ En streng, der indeholder den aktuelle dato
__FILE__ A 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 heltal, der ikke er nul
__TIME__ En streng, der indeholder den aktuelle dato.

Eksempel 3: Hent den aktuelle tid ved hjælp af __TIME__

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

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

Output

Current time: 19:54:39

Anbefalet læsning

  • Linjekontrol
  • Pragmaer
  • Preprocessoroutput
  • Andre direktiver

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.