C Preprocesor și macrocomenzi

În acest tutorial, veți fi prezentat preprocesoarelor c și veți învăța să utilizați #include, #define și compilarea condiționată cu ajutorul exemplelor.

Preprocesorul C este un preprocesor macro (vă permite să definiți macrocomenzi) care vă transformă programul înainte de a fi compilat. Aceste transformări pot fi includerea fișierului antet, extinderi macro etc.

Toate directivele de preprocesare încep cu un #simbol. De exemplu,

 #define PI 3.14

Unele dintre utilizările comune ale preprocesorului C sunt:

Inclusiv fișiere antet: #include

#includePreprocesorul este utilizat pentru a include fișiere antet pentru programe C. De exemplu,

 #include 

Iată stdio.hun fișier antet. #includeDirectiva preprocessor înlocuiește linia de mai sus cu conținutul stdio.hfișierului antet.

Acesta este motivul pentru care trebuie să utilizați #include înainte de a putea utiliza funcții precum scanf()și printf().

De asemenea, puteți crea propriul fișier antet care conține declarația de funcție și îl puteți include în programul dvs. utilizând această directivă de preprocesare.

 #include "my_header.h"

Accesați această pagină pentru a afla mai multe despre utilizarea fișierelor antet.

Macrocomenzi folosind #define

O macrocomandă este un fragment de cod căruia i se dă un nume. Puteți defini o macro în C folosind #definedirectiva preprocesorului.

Iată un exemplu.

 #define c 299792458 // speed of light

Aici, când folosim c în programul nostru, acesta este înlocuit cu 299792458.

Exemplul 1: #define preprocesator

 #include #define PI 3.1415 int 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; )

Funcționează ca Macros

De asemenea, puteți defini macro-uri care funcționează într-un mod similar, ca un apel funcțional. Acest lucru este cunoscut sub numele de macro-uri funcționale. De exemplu,

 #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, apoi se extinde după cum urmează:

 circleArea(5) expands to (3.1415*5*5)

Exemplul 2: Utilizarea preprocesatorului #define

 #include #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; )

Accesați această pagină pentru a afla mai multe despre macrocomenzi și #define preprocesator.

Compilație condiționată

În programarea C, puteți instrui preprocesorul dacă includeți sau nu un bloc de cod. Pentru a face acest lucru, se pot utiliza directive condiționale.

Este similar cu o ifafirmație cu o diferență majoră.

Instrucțiunea ifeste testată în timpul execuției pentru a verifica dacă un bloc de cod ar trebui executat sau nu, în timp ce condiționalele sunt utilizate pentru a include (sau sări) un bloc de cod în programul dvs. înainte de execuție.

Utilizări ale condiționalului

  • folosiți coduri diferite în funcție de mașină, sistem de operare
  • compilați același fișier sursă în două programe diferite
  • pentru a exclude anumite coduri din program, dar pentru a le păstra ca referință în scopuri viitoare

Cum se folosește condițional?

Pentru a utiliza condiționată, #ifdef, #if, #defined, #elseși #elseifsunt utilizate directivele.

Directiva #ifdef

 #ifdef MACRO // conditional codes #endif 

Aici, codurile condiționale sunt incluse în program numai dacă MACRO este definit.

Directiva #if, #elif și #else

 #if expression // conditional codes #endif 

Aici, expresia este o expresie de tip întreg (pot fi numere întregi, caractere, expresie aritmetică, macrocomenzi și așa mai departe).

Codurile condiționale sunt incluse în program numai dacă expresia este evaluată la o valoare diferită de zero.

#elseDirectiva opțională poate fi utilizată împreună cu #ifdirectiva.

 #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif 

De asemenea, puteți adăuga condiționat imbricat la #if… #elseutilizarea#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 

#definit

Operatorul special #definit este folosit pentru a testa dacă o anumită macro este definită sau nu. Este adesea folosit cu directiva #if.

 #if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes 

Macro-uri predefinite

Iată câteva macro-uri predefinite în programarea C.

Macro Valoare
__DATE__ Un șir care conține data curentă
__FILE__ Un șir care conține numele fișierului
__LINE__ Un număr întreg care reprezintă numărul de linie curent
__STDC__ Dacă urmează standardul ANSI C, atunci valoarea este un număr întreg diferit de zero
__TIME__ Un șir care conține data curentă.

Exemplul 3: obțineți ora curentă folosind __TIME__

Următorul program afișează ora curentă folosind __TIME__macro.

 #include int main() ( printf("Current time: %s",__TIME__); )

Ieșire

 Ora curentă: 19:54:39

Lecturi recomandate

  • Control linie
  • Pragme
  • Ieșire preprocesor
  • Alte directive

Articole interesante...