In deze tutorial maak je kennis met c preprocessors en leer je #include, #define en conditionele compilatie te gebruiken met behulp van voorbeelden.
De C-preprocessor is een macro-preprocessor (waarmee u macro's kunt definiëren) die uw programma transformeert voordat het wordt gecompileerd. Deze transformaties kunnen het opnemen van een headerbestand, macro-uitbreidingen enz. Zijn.
Alle voorbewerkingsrichtlijnen beginnen met een #
symbool. Bijvoorbeeld,
#define PI 3.14
Enkele van de meest voorkomende toepassingen van C-preprocessor zijn:
Inclusief koptekstbestanden: #include
De #include
preprocessor wordt gebruikt om header-bestanden op te nemen in C-programma's. Bijvoorbeeld,
#include
Hier stdio.h
is een header-bestand. De #include
preprocessor-instructie vervangt de bovenstaande regel door de inhoud van het stdio.h
header-bestand.
Dat is de reden waarom u #include
functies moet gebruiken voordat u functies zoals scanf()
en kunt gebruiken printf()
.
U kunt ook uw eigen headerbestand met functiedeclaratie maken en dit in uw programma opnemen met behulp van deze preprocessorrichtlijn.
#include "my_header.h"
Bezoek deze pagina voor meer informatie over het gebruik van headerbestanden.
Macro's met #define
Een macro is een codefragment dat een naam krijgt. U kunt een macro in C definiëren met behulp van de #define
preprocessorrichtlijn.
Hier is 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 #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; )
Functioneren als macro's
U kunt ook macro's definiëren die op dezelfde manier werken als een functieaanroep. Dit staat bekend als functieachtige macro's. Bijvoorbeeld,
#define circleArea(r) (3.1415*(r)*(r))
Elke keer dat het programma tegenkomt circleArea(argument)
, wordt het vervangen door (3.1415*(argument)*(argument))
.
Stel dat we 5 als argument hebben doorgegeven, dan wordt het uitgebreid zoals hieronder:
circleArea(5) expands to (3.1415*5*5)
Voorbeeld 2: #define preprocessor gebruiken
#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; )
Bezoek deze pagina voor meer informatie over macro's en #define preprocessor.
Voorwaardelijke compilatie
Bij C-programmering kunt u de preprocessor instrueren of u een codeblok wilt opnemen of niet. Hiervoor kunnen voorwaardelijke richtlijnen worden gebruikt.
Het is vergelijkbaar met een if
verklaring met één groot verschil.
De if
instructie wordt tijdens de uitvoeringstijd getest om te controleren of een codeblok moet worden uitgevoerd of niet, terwijl de voorwaarden worden gebruikt om een codeblok in uw programma op te nemen (of over te slaan) voordat het wordt uitgevoerd.
Gebruik van voorwaardelijk
- gebruik een andere 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 deze te bewaren als referentie voor toekomstig gebruik
Hoe voorwaardelijk te gebruiken?
Om voorwaardelijk te gebruiken #ifdef
, #if
worden #defined
,, #else
en #elseif
richtlijnen 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 is uitdrukking een uitdrukking van het type integer (kan gehele getallen, tekens, rekenkundige uitdrukking, macro's enzovoort zijn).
De voorwaardelijke codes worden alleen in het programma opgenomen als de uitdrukking wordt geëvalueerd naar een niet-nulwaarde.
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 voorwaardelijk toevoegen aan uw #if… #else
gebruik#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
#bepaald
De speciale operator #defined wordt gebruikt om te testen of een bepaalde macro is gedefinieerd of niet. Het wordt vaak gebruikt met de #if-richtlijn.
#if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes
Vooraf gedefinieerde macro's
Hier zijn enkele voorgedefinieerde macro's in C-programmering.
Macro | Waarde |
---|---|
__DATE__ | Een tekenreeks met de huidige datum |
__FILE__ | Een tekenreeks met de bestandsnaam |
__LINE__ | Een geheel getal dat het huidige regelnummer vertegenwoordigt |
__STDC__ | Als volgt op ANSI-standaard C, dan is de waarde een geheel getal dat niet nul is |
__TIME__ | Een tekenreeks met de huidige datum. |
Voorbeeld 3: verkrijg de huidige tijd met __TIME__
Het volgende programma geeft de huidige tijd weer met behulp van __TIME__
macro.
#include int main() ( printf("Current time: %s",__TIME__); )
Uitvoer
Huidige tijd: 19:54:39
Aanbevolen metingen
- Lijncontrole
- Pragmas
- Preprocessor-uitvoer
- Andere richtlijnen