Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C - Preprocessors

De C Preprocessor is geen onderdeel van de compiler, maar is een aparte stap in het compilatieproces. In eenvoudige bewoordingen is een C-preprocessor slechts een hulpmiddel voor tekstvervanging en instrueert het de compiler om de vereiste voorbewerking uit te voeren vóór de eigenlijke compilatie. We zullen naar de C Preprocessor verwijzen als CPP.

Alle preprocessor-opdrachten beginnen met een hekje (#). Het moet het eerste niet-lege teken zijn en voor de leesbaarheid moet een preprocessor-instructie in de eerste kolom beginnen. In de volgende sectie worden alle belangrijke preprocessor-richtlijnen opgesomd −

Zr.nr. Richtlijn en beschrijving
1

#define

Vervangt een preprocessor-macro.

2

#include

Voegt een bepaalde kop in uit een ander bestand.

3

#undef

Definieert een preprocessor-macro.

4

#ifdef

Retourneert waar als deze macro is gedefinieerd.

5

#ifndef

Retourneert waar als deze macro niet is gedefinieerd.

6

#if

Test of een voorwaarde voor het compileren waar is.

7

#else

Het alternatief voor #if.

8

#elif

#else en #if in één statement.

9

#endif

Beëindigt preprocessor voorwaardelijk.

10

#fout

Drukt foutmelding af op stderr.

11

#pragma

Geeft speciale commando's aan de compiler, met behulp van een gestandaardiseerde methode.

Voorbeelden van preprocessors

Analyseer de volgende voorbeelden om de verschillende richtlijnen te begrijpen.

#define MAX_ARRAY_LENGTH 20

Deze instructie vertelt de CPP om instanties van MAX_ARRAY_LENGTH te vervangen door 20. Gebruik #define voor constanten om de leesbaarheid te vergroten.

#include <stdio.h>
#include "myheader.h"

Deze richtlijnen vertellen de CPP om stdio.h op te halen uit System Libraries en voeg de tekst toe aan het huidige bronbestand. De volgende regel vertelt CPP om myheader.h . op te halen uit de lokale map en voeg de inhoud toe aan het huidige bronbestand.

#undef  FILE_SIZE
#define FILE_SIZE 42

Het vertelt de CPP om bestaande FILE_SIZE ongedaan te maken en te definiëren als 42.

#ifndef MESSAGE
   #define MESSAGE "You wish!"
#endif

Het vertelt de CPP om MESSAGE alleen te definiëren als MESSAGE nog niet is gedefinieerd.

#ifdef DEBUG
   /* Your debugging statements here */
#endif

Het vertelt de CPP om de bijgevoegde instructies te verwerken als DEBUG is gedefinieerd. Dit is handig als u de -DDEBUG . passeert vlag naar de gcc-compiler op het moment van compilatie. Dit definieert DEBUG, dus je kunt debuggen tijdens het compileren in- en uitschakelen.

Vooraf gedefinieerde macro's

ANSI C definieert een aantal macro's. Hoewel ze allemaal beschikbaar zijn voor gebruik bij het programmeren, mogen de vooraf gedefinieerde macro's niet rechtstreeks worden gewijzigd.

Zr.nr. Macro en beschrijving
1

__DATUM__

De huidige datum als letterteken in "MMM DD YYYY"-formaat.

2

__TIME__

De huidige tijd als een letterlijk teken in "HH:MM:SS" formaat.

3

__FILE__

Dit bevat de huidige bestandsnaam als een letterlijke tekenreeks.

4

__LINE__

Dit bevat het huidige regelnummer als decimale constante.

5

__STDC__

Gedefinieerd als 1 wanneer de compiler voldoet aan de ANSI-standaard.

Laten we het volgende voorbeeld proberen −

Live demo
#include <stdio.h>

int main() {

   printf("File :%s\n", __FILE__ );
   printf("Date :%s\n", __DATE__ );
   printf("Time :%s\n", __TIME__ );
   printf("Line :%d\n", __LINE__ );
   printf("ANSI :%d\n", __STDC__ );

}

Wanneer de bovenstaande code in een bestand test.c wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1

Preprocessor-operators

De C-preprocessor biedt de volgende operators om macro's te maken −

De Macro Voortzetting (\) Operator

Een macro is normaal gesproken beperkt tot een enkele regel. De macro-vervolgoperator (\) wordt gebruikt om door te gaan met een macro die te lang is voor een enkele regel. Bijvoorbeeld −

#define  message_for(a, b)  \
   printf(#a " and " #b ": We love you!\n")

De operator Stringize (#)

De tekenreeksoperator of nummertekenoperator ( '#' ), wanneer gebruikt binnen een macrodefinitie, converteert een macroparameter naar een tekenreeksconstante. Deze operator mag alleen worden gebruikt in een macro met een gespecificeerd argument of parameterlijst. Bijvoorbeeld −

Live demo
#include <stdio.h>

#define  message_for(a, b)  \
   printf(#a " and " #b ": We love you!\n")

int main(void) {
   message_for(Carole, Debra);
   return 0;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

Carole and Debra: We love you!

De operator token plakken (##)

De operator voor het plakken van tokens (##) binnen een macrodefinitie combineert twee argumenten. Hiermee kunnen twee afzonderlijke tokens in de macrodefinitie worden samengevoegd tot één token. Bijvoorbeeld −

Live demo
#include <stdio.h>

#define tokenpaster(n) printf ("token" #n " = %d", token##n)

int main(void) {
   int token34 = 40;
   tokenpaster(34);
   return 0;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

token34 = 40

Het gebeurde zo omdat dit voorbeeld resulteert in de volgende feitelijke uitvoer van de preprocessor −

printf ("token34 = %d", token34);

Dit voorbeeld toont de aaneenschakeling van token##n in token34 en hier hebben we beide stringize gebruikt en token-plakken .

De gedefinieerde() operator

De preprocessor gedefinieerd operator wordt gebruikt in constante expressies om te bepalen of een identifier is gedefinieerd met #define. Als de opgegeven id is gedefinieerd, is de waarde waar (niet-nul). Als het symbool niet is gedefinieerd, is de waarde onwaar (nul). De gedefinieerde operator wordt als volgt gespecificeerd −

Live demo
#include <stdio.h>

#if !defined (MESSAGE)
   #define MESSAGE "You wish!"
#endif

int main(void) {
   printf("Here is the message: %s\n", MESSAGE);  
   return 0;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

Here is the message: You wish!

Geparameteriseerde macro's

Een van de krachtige functies van de CPP is de mogelijkheid om functies te simuleren met behulp van geparametriseerde macro's. We kunnen bijvoorbeeld een code hebben om een ​​getal als volgt kwadratisch te maken −

int square(int x) {
   return x * x;
}

We kunnen de code boven de code als volgt herschrijven met een macro −

#define square(x) ((x) * (x))

Macro's met argumenten moeten worden gedefinieerd met de #define richtlijn voordat ze kunnen worden gebruikt. De argumentenlijst staat tussen haakjes en moet direct achter de macronaam volgen. Spaties zijn niet toegestaan ​​tussen de macronaam en haakjes openen. Bijvoorbeeld −

Live demo
#include <stdio.h>

#define MAX(x,y) ((x) > (y) ? (x) : (y))

int main(void) {
   printf("Max between 20 and 10 is %d\n", MAX(10, 20));  
   return 0;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

Max between 20 and 10 is 20

C Taal

  1. C# Hello World - Uw eerste C#-programma
  2. C#-zoekwoorden en -ID's
  3. C#-variabelen en (primitieve) gegevenstypen
  4. C#-operators
  5. C# Bitsgewijze en Bit Shift-operators
  6. C# Basisinvoer en -uitvoer
  7. C#-expressies, statements en blokken (met voorbeelden)
  8. C# Opmerkingen
  9. C# switch-instructie
  10. C# ternair (? :) Operator
  11. C# break-instructie