preprocessor directives c
Et detaljeret kig på præprocessordirektiver i C ++.
Forprocessoren er en unik funktion i C ++. I C ++ har vi trin som kompilering, sammenkædning og udførelse til et typisk program. I virkeligheden har vi mange andre funktioner i et C ++ - program, der skal behandles, inden vi sender programmet til kompilering.
Til dette formål udføres et specielt trin kaldet forbehandling. Forbehandling udføres inden kompileringsprocessen, og specialfunktionerne forbehandles. Som et resultat opnås et udvidet C ++ - program, som derefter sendes til compileren.
=> Besøg her for at lære C ++ fra bunden.
Hvad du lærer:
- Oversigt
- Direktiver om filinddragelse
- Makrodefinitionsdirektiver
- Direktiv om betinget kompilering
- Operatørerne # & ##
- Andre direktiver
- Foruddefinerede makroer
- Konklusion
- Anbefalet læsning
Oversigt
De særlige funktioner til forbehandling identificeres ved hjælp af en enhed kaldet 'Preprocessor directive'. Disse forprocessordirektiver fortæller compileren, at visse oplysninger i C ++ - programmet, der er markeret med forprocessordirektiver, skal forbehandles før kompilering.
Bemærk, at i C ++ begynder alle forprocessordirektiver med et '#' symbol. I det øjeblik præprocessoren (en del af compileren) møder # -symbolet, bliver oplysningerne efter # -symbolet forbehandlet, før programmet sendes til compileren.
I modsætning til de andre C ++ - udsagn slutter præprocessordirektiver ikke med semikolon.
I denne vejledning vil vi undersøge de forskellige forprocessordirektiver understøttet af C ++.
Direktiver om filinddragelse
#omfatte
Direktivet om filinklusion #include giver os mulighed for at medtage andre filer i vores kildeprogram. Vi kan inkludere enhver headerfil, der indeholder definitioner af forskellige foruddefinerede funktioner i vores program ved hjælp af disse funktioner. Vi kan inkludere headerfiler i vores program ved hjælp af følgende syntaks.
#include
Eksempel: #omfatte
Vi har allerede set dette i vores C ++ - programmer. Overskriften iostream indeholder de funktioner, der kræves til input / output datastreaming som cout, cin osv.
Efterhånden som vores programmer bliver større, eller funktionaliteten bliver kompleks, vil vi måske opdele vores program i forskellige filer eller importere funktionalitet fra de andre filer. I dette tilfælde bruger vi brugerdefinerede filer. For at inkludere brugerdefinerede filer i vores program kan vi benytte følgende syntaks af #include-direktivet.
#include “filename”
Eksempel: # inkluderer 'vector_int.h'
Dette er en brugerdefineret headerfil, som vi agter at medtage i vores program for at kunne bruge dens funktionalitet.
Nedenstående kodeeksempel viser brugen af #include-direktivet.
seleninterview spørgsmål og svar pdf
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
Produktion:
Dette er et eksempel, der viser inklusionsdirektivet #include.
Som vist har vi brugt #include-direktivet til at inkludere headerens funktionalitet i vores program.
Makrodefinitionsdirektiver
#Definere
#Define-direktivet bruges til at definere de symbolske konstanter eller makroer i C ++ - programmet.
Den generelle form for et #definerende direktiv er:
#define macro_name replacement code
Når en forprocessor støder på makroen i programmet, erstatter forprocessoren denne makro med den kode, der er defineret ved hjælp af #definer-direktivet, før koden sendes til compileren.
Nedenstående kodeeksempel viser en symbolsk konstant RADIUS, der er defineret ved hjælp af #define-direktivet og dets anvendelse i programmet.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
Produktion:
Område af en cirkel: 78,55
Som vist i programmet kan vi bruge symbolsk konstant RADIUS i vores kode, og den erstattes af den værdi, der er defineret for den ved hjælp af #define-direktivet.
lagring af objekter i en array-java
Vi kan bruge #define-direktivet til at definere en korrekt funktionskode. Disse funktioner er normalt små funktioner.
Et eksempel er vist nedenfor.
#include #define REC_AREA(length, breadth) (length * breadth) using namespace std; int main() { int length = 20, breadth = 5, area; area = REC_AREA(length, breadth); cout << 'Area of a rectangle is: ' << area; return 0; }
Produktion:
Arealet af et rektangel er: 100
Her ved hjælp af #define-direktivet har vi defineret en funktion REC_AREA, der tager to argumenter, dvs. længde og bredde og beregner arealet af et rektangel. I hovedfunktionen bruger vi bare denne makro og leverer to argumenter til den for at opnå arealet af et rektangel.
#undef
Makroer i et program defineret med #define-direktivet varer, indtil det er udefineret ved hjælp af #undef-direktivet. Når programmet møder #undef, vil den efterfølgende brug af makro (udefineret af #undef) give en kompileringsfejl.
I ovenstående program, hvis vi bare giver en erklæring #undef REC_AREA efter heltalets erklæringer, vil programmet give en kompileringsfejl.
Direktiv om betinget kompilering
Bortset fra de ovenfor anførte direktiver, leverer C ++ også følgende direktiver, der kan bruges til betinget kompilering af kode. Disse direktiver kan bruges på lignende linjer i if-else-erklæringen af C ++.
For eksempel, Vi kan indstille DEBUG til et program ON eller OFF ved hjælp af disse betingede direktiver.
Nogle af de betingede kompileringsdirektiver i C ++ inkluderer:
- #hvis
- #elif
- #Afslut Hvis
- #ifdef
- #ifndef
- #andet
Nedenstående program demonstrerer brugen af betingede kompileringsdirektiver i et C ++ - program.
#include using namespace std; #define DEBUG #define MAX(a,b) (((a)>(b)) ? a : b) int main () { int i, j; i = 100; j = 50; #ifdef DEBUG cout <<'Trace: Start of main function' << endl; #endif cout <<'The maximum is ' << MAX(i, j) << endl; #undef MAX //cout <<'The maximum is ' << MAX(10,20) << endl; #ifdef DEBUG cout <<'Trace: End of main function' << endl; #endif return 0; }
Produktion:
Sporing: Start af hovedfunktion
Maksimum er 100
Spor: Slut på hovedfunktion
I ovenstående program bruger vi #ifdef - #endif-direktivet til at definere en DEBUG til programmet. Derefter udefinerede vi makrofunktionen MAX ved hjælp af #undef-direktivet. Direktivet om betinget kompilering konstruerer #ifdef - #endif kontrollerer, om DEBUG er indstillet, og hvis det er indstillet, udskriver det få meddelelser i programmet.
Operatørerne # & ##
Operatorerne # og ## er to specielle operatorer, der henholdsvis bruges til at konvertere et teksttoken til en streng, der skal vises, og sammenkæde to tokens.
Nedenfor gives et eksempel, der demonstrerer begge disse operatører.
#include using namespace std; #define MKSTR( x ) #x #define concat(a, b) a ## b int main () { cout <<'MKSTR(Hello World) = '<< MKSTR(Hello World) << endl; int xy = 100; cout <<'concat(x,y) = '< Produktion:
MKSTR (Hello World) = Hello World
concat (x, y) = 100
I ovenstående program definerer vi MKSTR med et argument x. Det har krop #x. Når vi udskriver denne MKSTR ved hjælp af argumentet 'Hello World', ser vi, at argumentet konverteres til en streng på grund af #x og vises til output.
Dernæst har vi defineret en concat-funktion med to argumenter a og b. I kroppen specificerer vi et ## b. Udtryk a ## b er lig med ab. Således i hovedfunktionen, når vi kalder concat (x, y), evalueres den faktisk til xy, hvilket er lig med det heltalsvariabel, som vi definerede.
Andre direktiver
#fejl
Den generelle syntaks for # fejldirektivet er:
#error error_message
Når kompilatoren støder på #fejldirektivet, vises fejlmeddelelsen, og kompilering stopper. Argumentet error_message kan indeholde et eller flere ord med eller uden anførselstegn.
#line
Dette beder kompilatoren om at ændre kompilatorens internt gemte linjenummer og filnavn til det givne linjenummer og filnavn.
hvordan spiller du SWF-filer
#line ciffer-sekvens (“filnavn”)
Talsekvensen kan være en heltalskonstant.
Eksempel:#line 200 test.c
I ovenstående eksempel er det internt gemte linjenummer indstillet til 200, og filnavnet ændres til test.c.
#pragma
Leverer implementeringsdefinerede instruktioner til compileren. Disse instruktioner er specifikke for compileren og platformen. Hvis instruktionen ikke stemmer overens, ignoreres direktivet uden at generere en syntaksfejl.
Foruddefinerede makroer
C ++ definerer også adskillige foruddefinerede makroer, der kan bruges af programmørerne.
Nogle af disse makroer er opstillet nedenfor.
Foruddefineret makro Beskrivelse __FIL__ Det aktuelle filnavn på det program, der kompileres __DATO__ Dato for oversættelse af kildekode til objektkode i formatet måned / dag / år __TID__ Tid i form time: minut: sekund, hvor programmet sammensættes __LINE__ Det aktuelle linjenummer på det program, der kompileres __cplusplus Heltalskonstant, der er defineret for hver compilerversion
Det følgende program demonstrerer disse makroer i et program.
#include using namespace std; int main () { cout<<'__LINE__ :' << __LINE__ << endl; cout<<'__FILE__ :' << __FILE__ << endl; cout<<'__DATE__ :' << __DATE__ << endl; cout<<'__TIME__ :' << __TIME__ << endl; cout<<'__cplusplus:'<<__cplusplus< Produktion:
__LINE__: 5
__FIL__: prog.cpp
__DATE__: 15. april 2019
__TID__: 12: 09: 15
__cplusplus: 201402
Programmets output ovenfor er i tråd med forklaringen af de foruddefinerede makroer ovenfor og er selvforklarende.
Konklusion
I denne vejledning har vi set forskellige præprocessordirektiver leveret af C ++ sammen med deres eksempler. Preprocessor direktiver hjælper os med at skrive mere effektive programmer og mere læsbare programmer til en vis grad.
De betingede kompileringsdirektiver giver os også mulighed for at forgrene vores programoutput på forskellige måder.
=> Se efter hele C ++ træningsserien her.
Anbefalet læsning
- Software Testing Hjælp Affiliate Program!
- Skriv og tjen - Program til erfarne QA-testere
- Unix Pipes Tutorial: Pipes in Unix Programming
- Biblioteksfunktioner i C ++
- 70+ BEST C ++ tutorials til at lære C ++ programmering GRATIS
- Kommandolinjeargumenter i C ++
- Iteratorer i STL
- Initialiseringslister i C ++