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

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

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.