Preprocesorul C este un preprocesor de macrocomenzi (vă permite să definiți macrocomenzi) care vă transformă programul înainte de a fi compilat. Aceste transformări pot fi includerea unui fișier antet, expansiuni de macro etc.
Toate directivele de preprocesare încep cu simbolul #
. De exemplu,
#define PI 3.14
Câteva dintre utilizările comune ale preprocesorului C sunt:
- Includerea fișierelor de antet: #include
- Macro-uri folosind #define
- Exemplu 1: #define preprocessor
- Macros asemănătoare funcțiilor
- Exemplu 2: Utilizarea preprocesorului #define
- Compilare condiționată
- Utilizări ale condiționalelor
- Cum se utilizează condiționalele?
- #ifdef Directiva
- #if, #elif și #else Directiva
- #defined
- Macrograme predefinite
- Exemplu 3: Obținerea orei curente folosind __TIME__
- Lecturi recomandate
Includerea fișierelor de antet: #include
Preprocesorul #include
este utilizat pentru a include fișiere antet în programele C. De exemplu,
#include <stdio.h>
Aici, stdio.h
este un fișier antet. Directiva preprocesorului #include
înlocuiește linia de mai sus cu conținutul fișierului de antet stdio.h
.
De aceea trebuie să folosiți #include <stdio.h>
înainte de a putea folosi funcții precum scanf()
și printf()
.
Puteți, de asemenea, să vă creați propriul fișier antet care să conțină declarații de funcții și să îl includeți în programul dumneavoastră folosind această directivă de preprocesor.
#include "my_header.h"
Vizitați această pagină pentru a afla mai multe despre utilizarea fișierelor antet.
Macro-uri folosind #define
Un macro este un fragment de cod căruia i se dă un nume. Puteți defini un macro în C folosind directiva de preprocesor #define
.
Iată un exemplu.
#define c 299792458 // speed of light
Aici, când folosim c în programul nostru, acesta este înlocuit cu 299792458
.
Exemplu 1: #define preprocessor
#include <stdio.h>#define PI 3.1415int 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;}
Macros asemănătoare funcțiilor
De asemenea, puteți defini macro-uri care lucrează într-un mod similar cu un apel de funcție. Acest lucru este cunoscut sub numele de macro-uri de tip funcție. De exemplu,
#define circleArea(r) (3.1415*(r)*(r))
#define circleArea(r) (3.1415*(r)*(r))
De fiecare dată când programul întâlnește circleArea(argument)
, acesta este înlocuit cu (3.1415*(argument)*(argument))
.
Să presupunem că am trecut 5 ca argument, atunci, se extinde ca mai jos:
circleArea(5) expands to (3.1415*5*5)
Exemplu 2: Utilizarea preprocesorului #define
#include <stdio.h>#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;}
Vizitați această pagină pentru a afla mai multe despre macro-uri și preprocesorul #define.
Compilare condiționată
În programarea C, puteți instrui preprocesorul dacă să includă sau nu un bloc de cod. Pentru a face acest lucru, se pot folosi directivele condiționale.
Este similar cu instrucțiunea if
cu o diferență majoră.
Instrucțiunea if
este testată în timpul execuției pentru a verifica dacă un bloc de cod trebuie să fie executat sau nu în timp ce, directivele condiționale sunt folosite pentru a include (sau sări) un bloc de cod în program înainte de execuție.
Utilizări ale condiționalelor
- utilizați coduri diferite în funcție de mașină, de sistemul de operare
- compilați același fișier sursă în două programe diferite
- excludeți un anumit cod din program, dar păstrați-l ca referință pentru scopuri viitoare
Cum se utilizează condiționalele?
Pentru a utiliza condiționalul, se folosesc directivele #ifdef
, #if
, #defined
, #else
și #elseif
.
#ifdef Directiva
#ifdef MACRO // conditional codes#endif
Aici, codurile condiționale sunt incluse în program numai dacă este definită MACRO.
#if, #elif și #else Directiva
#if expression // conditional codes#endif
Aici, expresia este o expresie de tip întreg (pot fi numere întregi, caractere, expresii aritmetice, macro-uri și așa mai departe).
Codurile condiționale sunt incluse în program numai dacă expresia este evaluată la o valoare diferită de zero.
Directiva opțională #else
poate fi utilizată cu directiva #if
.
#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif
De asemenea, puteți adăuga condiționale imbricate în #if...#else
folosind #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
#defined
Operatorul special #defined este utilizat pentru a testa dacă un anumit macro este definit sau nu. Este adesea folosit împreună cu directiva #if.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Macrograme predefinite
Iată câteva macrograme predefinite în programarea C.
Macro | Valoare |
---|---|
__DATE__ |
Un șir de caractere care conține data curentă |
__FILE__ |
A șir de caractere care conține numele fișierului |
__LINE__ |
Un număr întreg care reprezintă numărul curent al liniei |
__STDC__ |
Dacă respectă standardul C ANSI, atunci valoarea este un număr întreg diferit de zero |
__TIME__ |
Un șir de caractere care conține data curentă. |
Exemplu 3: Obținerea orei curente folosind __TIME__
Programul următor emite ora curentă folosind macroul __TIME__
.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Salire
Current time: 19:54:39
Lecturi recomandate
- Control de linie
- Pragme
- Salire preprocesor
- Alte directive
.