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
- Makroer ved hjælp af #define
- Eksempel 1: #define preprocessor
- Funktionslignende makroer
- Eksempel 2: Brug af #define preprocessor
- Conditional Compilation
- Anvendelser af betinget
- Hvordan bruger man betinget?
- #ifdef-direktivet
- #if, #elif og #else-direktivet
- #defined
- Predefinerede makroer
- Eksempel 3: Hent den aktuelle tid ved hjælp af __TIME__
- Anbefalet læsning
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