C Preprocessor en macro's

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 #includepreprocessor wordt gebruikt om header-bestanden op te nemen in C-programma's. Bijvoorbeeld,

 #include 

Hier stdio.his een header-bestand. De #includepreprocessor-instructie vervangt de bovenstaande regel door de inhoud van het stdio.hheader-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 #definepreprocessorrichtlijn.

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 ifverklaring met één groot verschil.

De ifinstructie 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, #ifworden #defined,, #elseen #elseifrichtlijnen 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 #elserichtlijn kan worden gebruikt met #ifrichtlijn.

 #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… #elsegebruik#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

Interessante artikelen...