preprocessor directives c
Una mirada detallada de les directives del preprocessador en C ++.
El preprocessador és una característica única de C ++. A C ++, tenim passos com la compilació, l'enllaç i l'execució d'un programa típic. En realitat, tenim moltes altres funcions en un programa C ++ que cal processar abans de passar el programa per a la compilació.
Amb aquest propòsit, es porta a terme un pas especial anomenat preprocessament. El processament previ es realitza abans del procés de compilació i es pre-processen les funcions especials. Com a resultat, s’obté un programa C ++ ampliat i després es passa al compilador.
=> Visiteu aquí per aprendre C ++ des de zero.
Què aprendreu:
- Visió general
- Directives d’inclusió d’arxius
- Directrius de definició de macros
- Directrius de compilació condicional
- Els operadors # i ##
- Altres directives
- Macros predefinides
- Conclusió
- Lectura recomanada
Visió general
Les característiques especials per al preprocessament s’identifiquen mitjançant una entitat anomenada “Directiva sobre el preprocessador”. Aquestes directrius de preprocessador indiquen al compilador que cal preprocessar certa informació del programa C ++ marcat amb directives de preprocessador abans de la compilació.
Tingueu en compte que a C ++ totes les directives del preprocessador comencen amb el símbol '#'. En el moment en què el preprocessador (part del compilador) troba el símbol #, la informació següent al símbol # es preprocessa abans de passar el programa al compilador.
A diferència de les altres sentències C ++, les directives del preprocessador no acaben amb punt i coma.
En aquest tutorial, explorarem les diverses directives de preprocessador admeses per C ++.
Directives d’inclusió d’arxius
#incloure
La directiva d’inclusió de fitxers #include ens permet incloure altres fitxers al nostre programa font. Podem incloure qualsevol fitxer de capçalera que contingui definicions de diverses funcions predefinides al nostre programa mitjançant aquestes funcions. Podem incloure fitxers de capçalera al nostre programa mitjançant la sintaxi següent.
#include
Exemple: #incloure
Ja ho hem vist als nostres programes C ++. La capçalera iostream conté les funcions necessàries per a la transmissió de dades d’entrada / sortida com Cout, cin, etc.
A mesura que els nostres programes creixin o la funcionalitat esdevingui complexa, potser voldríem dividir el nostre programa en diversos fitxers o importar funcionalitats dels altres fitxers. En aquest cas, fem servir fitxers definits per l'usuari. Per incloure fitxers definits per l'usuari al nostre programa, podem fer servir la sintaxi següent de la directiva #include.
#include “filename”
Exemple: #include 'vector_int.h'
Es tracta d’un fitxer de capçalera definit per l’usuari que pretenem incloure al nostre programa per tal d’utilitzar-ne la funcionalitat.
L'exemple de codi següent mostra l'ús de la directiva #include.
eines d’emmascarament de dades per al servidor sql
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
Sortida:
Aquest és un exemple que demostra la directiva d'inclusió #include.
Com es mostra, hem utilitzat la directiva #include per incloure la funcionalitat de la capçalera al nostre programa.
Directrius de definició de macros
#define
La directiva #define s'utilitza per definir les constants o macros simbòliques al programa C ++.
La forma general d'una directiva #define és:
#define macro_name replacement code
Quan un preprocessador es troba amb la macro del programa, el preprocessador reemplaça aquesta macro pel codi que es defineix mitjançant la directiva #define abans de passar el codi al compilador.
El següent exemple de codi mostra una constant simbòlica RADIUS que es defineix mitjançant la directiva #define i el seu ús al programa.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
Sortida:
Àrea d'un cercle: 78,55
Com es mostra al programa, podem fer servir la constant simbòlica RADIUS al nostre codi i se substituirà pel valor definit per a ella mitjançant la directiva #define.
preguntes del servei d’atenció personalitzada per fer-los als usuaris
Podem utilitzar la directiva #define per definir un codi de funció adequat. Aquestes funcions solen ser funcions petites.
A continuació es mostra un exemple.
#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; }
Sortida:
L'àrea d'un rectangle és: 100
Aquí, mitjançant la directiva #define, hem definit una funció REC_AREA que pren dos arguments, és a dir, longitud i amplada, i calcula l'àrea d'un rectangle. A la funció principal, només fem servir aquesta macro i li proporcionem dos arguments per obtenir l’àrea d’un rectangle.
#undef
Les macros d’un programa definit amb la directiva #define duren fins que no es defineixen mitjançant la directiva #undef. Un cop el programa troba #undef, l'ús posterior de macro (sense definir per #undef) produirà un error de compilació.
Al programa anterior, si només donem una declaració #undef REC_AREA després de les declaracions senceres, el programa donarà un error de compilació.
Directrius de compilació condicional
A part de les directives explicades anteriorment, C ++ també proporciona les següents directrius que es poden utilitzar per a la compilació condicional de codi. Aquestes directives es poden utilitzar en línies similars de la sentència if-else de C ++.
Per exemple, podem configurar DEBUG per a un programa ON o OFF mitjançant aquestes directives condicionals.
Algunes de les directives de compilació condicionals que es proporcionen a C ++ inclouen:
- #si
- #elif
- #endif
- #ifdef
- #ifndef
- #else
El programa següent mostra l’ús de directives de compilació condicional en un programa C ++.
#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; }
Sortida:
Traça: inici de la funció principal
El màxim és de 100
Traça: final de la funció principal
Al programa anterior, fem servir la directiva #ifdef - #endif per definir un DEBUG per al programa. A continuació, hem definit la funció de macro MAX mitjançant la directiva #undef. La directiva de compilació condicional construeix #ifdef - #endif comprova si DEBUG està configurat i, si està definit, imprimeix pocs missatges al programa.
Els operadors # i ##
Els operadors # i ## són dos operadors especials que s'utilitzen respectivament per convertir un testimoni de text en una cadena que es mostrarà i concatenarà dos testimonis.
A continuació es mostra un exemple que mostra aquests dos operadors.
#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) = '< Sortida:
MKSTR (Hello World) = Hola món
concat (x, y) = 100
Al programa anterior, definim MKSTR amb un argument x. Té el cos #x. Quan imprimim aquest MKSTR utilitzant l'argument 'Hello World', veiem que a causa de #x, l'argument es converteix en una cadena i es mostra a la sortida.
A continuació, hem definit una funció concat amb dos arguments a i b. Al cos especifiquem un ## b. L’expressió a ## b és igual a ab. Així, a la funció principal quan anomenem concat (x, y), en realitat avalua a xy que és igual a la variable sencera que hem definit.
Altres directives
#error
La sintaxi general de la directiva #error és:
#error error_message
Quan el compilador troba la directiva #error, mostra el missatge error_messatge i la compilació s'atura. L'argument error_message pot contenir una o més paraules amb o sense cometes.
# línia
Això indica al compilador que canviï el número de línia i el nom de fitxer emmagatzemats internament del compilador pel número de línia i el nom de fitxer indicats.
programari de copiar i gravar DVD gratis
# línia seqüència de dígits ('nom del fitxer')
La seqüència_digital pot ser una constant sencera.
Exemple:#line 200 test.c
A l'exemple anterior, el número de línia emmagatzemat internament s'estableix a 200 i el nom del fitxer es canvia a test.c.
#pragma
Subministra al compilador instruccions definides per la implementació. Aquestes instruccions són específiques del compilador i de la plataforma. Si la instrucció no coincideix, s'ignora la directiva sense generar cap error de sintaxi.
Macros predefinides
C ++ també defineix nombroses macros predefinides que els programadors poden utilitzar.
A continuació, es detallen algunes d’aquestes macros.
Macro predefinida Descripció __DOSSIER__ El nom de fitxer actual del programa que s'està compilant __DATA__ Data de traducció del codi font al codi objecte en el format mes / dia / any __TEMPS__ Temps de la forma hora: minut: segon en què es compila el programa __LINE__ El número de línia actual del programa que s'està compilant __plusplus Constant d'enter que es defineix per a cada versió del compilador
El programa següent mostra aquestes macros en un programa.
#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< Sortida:
__LINE__: 5
__FITXER__: prog.cpp
__DATE__: 15 d'abril de 2019
__TIME__: 12: 09: 15
__plusplus: 201402
La sortida del programa anterior coincideix amb l’explicació de les macros predefinides anteriors i s’explica per si mateixa.
Conclusió
En aquest tutorial, hem vist diverses directives de preprocessador proporcionades per C ++ juntament amb els seus exemples. Les directives del preprocessador ens ajuden a escriure programes més eficients i programes més llegibles fins a cert punt.
Les directrius de compilació condicional també ens permeten ramificar la sortida del nostre programa de diverses maneres.
=> Cerqueu aquí tota la sèrie de formació C ++.
Lectura recomanada
- Ajuda de proves de programari Programa d'afiliació.
- Escriu i guanya: programa per a verificadors de control de qualitat experimentats
- Tutorial Unix Pipes: Pipes a la programació Unix
- Funcions de biblioteca a C ++
- 70+ BEST Tutorials C ++ per aprendre programació C ++ GRATIS
- Arguments de la línia d'ordres a C ++
- Iteradors a STL
- Llistes d'inicialitzadors a C ++