De C preprocessor is een macro preprocessor (staat u toe macro’s te definiëren) die uw programma transformeert alvorens het wordt gecompileerd. Deze transformaties kunnen bestaan uit het invoegen van header-bestanden, macro-uitbreidingen enz.
Alle preprocessing directives beginnen met een #
-symbool. Bijvoorbeeld,
#define PI 3.14
Enkele van de veel voorkomende toepassingen van C preprocessor zijn:
- Inclusie van header bestanden: #include
- Macro’s met behulp van #define
- Voorbeeld 1: #define preprocessor
- Functie-achtige Macro’s
- Exemplaar 2: #define preprocessor gebruiken
- Conditional Compilation
- Toepassingen van voorwaardelijk
- Hoe voorwaardelijk te gebruiken?
- #ifdef Directive
- #if, #elif en #else Directive
- #defined
- Predefined Macros
- Voorbeeld 3: Verkrijg de huidige tijd met behulp van __TIME__
- Aanbevolen lectuur
Inclusie van header bestanden: #include
De #include
preprocessor wordt gebruikt om header bestanden in C programma’s op te nemen. Bijvoorbeeld,
#include <stdio.h>
Hier, stdio.h
is een header bestand. De #include
preprocessor directive vervangt de bovenstaande regel door de inhoud van stdio.h
header file.
Dat is de reden waarom u #include <stdio.h>
moet gebruiken voordat u functies als scanf()
en printf()
kunt gebruiken.
U kunt ook uw eigen header-bestand met functie-declaratie maken en het in uw programma opnemen met behulp van deze preprocessor directive.
#include "my_header.h"
Bezoek deze pagina voor meer informatie over het gebruik van header-bestanden.
Macro’s met behulp van #define
Een macro is een fragment van code dat een naam krijgt. U kunt een macro in C definiëren met behulp van de #define
preprocessor directive.
Hier volgt een voorbeeld.
#define c 299792458 // speed of light
Hier, wanneer we c in ons programma gebruiken, wordt het vervangen door 299792458
.
Voorbeeld 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;}
Functie-achtige Macro’s
Je kunt ook macro’s definiëren die op een vergelijkbare manier werken als een functie-aanroep. Dit staat bekend als functie-achtige macro’s. Bijvoorbeeld,
#define circleArea(r) (3.1415*(r)*(r))
Telkens wanneer het programma circleArea(argument)
tegenkomt, wordt het vervangen door (3.1415*(argument)*(argument))
.
Voorstel dat we 5 als argument hebben doorgegeven, dan ziet het er als volgt uit:
circleArea(5) expands to (3.1415*5*5)
Exemplaar 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.
Conditional Compilation
In C programmeren, kunt u de preprocessor instrueren of een blok code wel of niet moet worden opgenomen. Om dit te doen, kunnen conditionele directieven worden gebruikt.
Het is vergelijkbaar met een if
statement met één groot verschil.
Het if
statement wordt getest tijdens de uitvoering om te controleren of een blok code moet worden uitgevoerd of niet, terwijl de conditionals worden gebruikt om een blok code in uw programma op te nemen (of over te slaan) voordat het wordt uitgevoerd.
Toepassingen van voorwaardelijk
- verschillende code gebruiken afhankelijk van de machine, besturingssysteem
- het zelfde bronbestand in twee verschillende programma’s compileren
- bepaalde code van het programma uitsluiten maar als referentie voor toekomstige doeleinden bewaren
Hoe voorwaardelijk te gebruiken?
Om voorwaardelijk te gebruiken, worden #ifdef
, #if
, #defined
, #else
en #elseif
directives gebruikt.
#ifdef Directive
#ifdef MACRO // conditional codes#endif
Hier worden de voorwaardelijke codes alleen in het programma opgenomen als MACRO is gedefinieerd.
#if, #elif en #else Directive
#if expression // conditional codes#endif
Hier is de expressie een expressie van het type integer (kunnen gehele getallen, tekens, rekenkundige expressie, macro’s enzovoorts zijn).
De voorwaardelijke codes worden alleen in het programma opgenomen als de uitdrukking wordt geëvalueerd tot een waarde van niet nul.
De optionele #else
directive kan worden gebruikt met #if
directive.
#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif
U kunt ook geneste voorwaardes aan uw #if...#else
toevoegen met #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 gedefinieerd is of niet. Het wordt vaak gebruikt met #if directive.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Predefined Macros
Hier zijn enkele voorgedefinieerde macro’s in C programmeren.
Macro | Value |
---|---|
__DATE__ |
Een string die de huidige datum bevat |
__FILE__ |
Een string die de bestandsnaam bevat |
__FILE__ |
Een string die de huidige datum bevat |
__LINE__ |
Een geheel getal dat het huidige regelnummer weergeeft |
__STDC__ |
Als het ANSI standaard C volgt, dan is de waarde een geheel getal zonder nul |
__TIME__ |
Een string die de huidige datum bevat. |
Voorbeeld 3: Verkrijg de huidige tijd met behulp van __TIME__
Het volgende programma geeft de huidige tijd weer met behulp van de __TIME__
macro.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Uitvoer
Current time: 19:54:39
Aanbevolen lectuur
- Lijnbesturing
- Pragma’s
- Preprocessoruitvoer
- Andere directieven