C Preprocessor en macro's
C Preprocessor en macro's
In deze tutorial maak je kennis met c preprocessors en leer je aan de hand van voorbeelden #include, #define en conditionele compilatie te gebruiken.

De C-preprocessor is een macro-preprocessor (waarmee je macro's kunt definiëren) die je programma transformeert voordat het wordt gecompileerd. Deze transformaties kunnen het opnemen van een headerbestand, macro-uitbreidingen enz. zijn.
Alle preprocessing-richtlijnen beginnen met een #
symbool. Bijvoorbeeld,
#define PI 3.14
Enkele veelvoorkomende toepassingen van C preprocessor zijn:
Inclusief header-bestanden:#include
De #include
preprocessor wordt gebruikt om header-bestanden op te nemen in C-programma's. Bijvoorbeeld,
#include <stdio.h>
Hier, stdio.h
is een header-bestand. De #include
preprocessor-richtlijn vervangt de bovenstaande regel door de inhoud van stdio.h
header-bestand.
Dat is de reden waarom je #include <stdio.h>
. moet gebruiken voordat u functies zoals scanf()
. kunt gebruiken en printf()
.
U kunt ook uw eigen header-bestand met functiedeclaratie maken en dit in uw programma opnemen met behulp van deze preprocessor-richtlijn.
#include "my_header.h"
Bezoek deze pagina voor meer informatie over het gebruik van headerbestanden.
Macro's met #define
Een macro is een stukje code dat een naam krijgt. U kunt een macro in C definiëren met behulp van de #define
preprocessor-richtlijn.
Hier is een voorbeeld.
#define c 299792458 // speed of light
Hier, wanneer we c . gebruiken in ons programma wordt het vervangen door 299792458
.
Voorbeeld 1:#define preprocessor
#include <stdio.h>
#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;
}
Functie zoals macro's
U kunt ook macro's definiëren die op dezelfde manier werken als een functieaanroep. Dit staat bekend als functie-achtige macro's. Bijvoorbeeld,
#define circleArea(r) (3.1415*(r)*(r))
Elke keer dat het programma circleArea(argument)
. tegenkomt , het wordt vervangen door (3.1415*(argument)*(argument))
.
Stel dat we 5 als argument hebben doorgegeven, dan breidt het uit als volgt:
circleArea(5) expands to (3.1415*5*5)
Voorbeeld 2:#define preprocessor gebruiken
#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;
}
Bezoek deze pagina voor meer informatie over macro's en #define preprocessor.
Voorwaardelijke compilatie
In C-programmering kunt u de preprocessor instrueren of u een codeblok moet opnemen of niet. Om dit te doen, kunnen voorwaardelijke richtlijnen worden gebruikt.
Het is vergelijkbaar met een if
verklaring met één groot verschil.
De if
instructie wordt getest tijdens de uitvoeringstijd om te controleren of een codeblok moet worden uitgevoerd of niet, terwijl de conditionals worden gebruikt om een codeblok in uw programma op te nemen (of over te slaan) voordat het wordt uitgevoerd.
Gebruik van voorwaardelijk
- gebruik verschillende code, afhankelijk van de machine, het besturingssysteem
- compileer hetzelfde bronbestand in twee verschillende programma's
- om bepaalde code uit het programma uit te sluiten, maar als referentie voor toekomstig doel te behouden
Hoe voorwaardelijk te gebruiken?
Om voorwaardelijk te gebruiken, #ifdef
, #if
, #defined
, #else
en #elif
richtlijnen worden gebruikt.
#ifdef-richtlijn
#ifdef MACRO
// conditional codes
#endif
Hier worden de voorwaardelijke codes alleen in het programma opgenomen als MACRO is gedefinieerd.
#if, #elif en #else richtlijn
#if expression
// conditional codes
#endif
Hier, uitdrukking is een uitdrukking van het type geheel getal (kan gehele getallen, tekens, rekenkundige uitdrukkingen, macro's enzovoort zijn).
De voorwaardelijke codes worden alleen in het programma opgenomen als de uitdrukking wordt geëvalueerd tot een waarde die niet nul is.
De optionele #else
richtlijn kan worden gebruikt met #if
richtlijn.
#if expression
conditional codes if expression is non-zero
#else
conditional if expression is 0
#endif
U kunt ook geneste voorwaarde toevoegen aan uw #if...#else
met behulp van #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
De speciale operator #defined wordt gebruikt om te testen of een bepaalde macro is gedefinieerd of niet. Het wordt vaak gebruikt met #if richtlijn.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
// codes
Vooraf gedefinieerde macro's
Hier zijn enkele vooraf gedefinieerde macro's in C-programmering.
Macro | Waarde |
---|---|
__DATE__ | Een tekenreeks met de huidige datum |
__FILE__ | Een tekenreeks die de bestandsnaam bevat |
__LINE__ | Een geheel getal dat het huidige regelnummer vertegenwoordigt |
__STDC__ | Als de ANSI-standaard C volgt, is de waarde een geheel getal dat niet nul is |
__TIME__ | Een tekenreeks die de huidige datum bevat. |
Voorbeeld 3:Haal de huidige tijd op met __TIME__
Het volgende programma geeft de huidige tijd weer met __TIME__
macro.
#include <stdio.h>
int main()
{
printf("Current time: %s",__TIME__);
}
Uitvoer
Current time: 19:54:39
Aanbevolen metingen
- Lijnbediening
- Pragma's
- Preprocessor-uitvoer
- Andere richtlijnen
C Taal