Î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
#include
Preprocesorul este utilizat pentru a include fișiere antet pentru programe C. De exemplu,
#include
Iată stdio.h
un fișier antet. #include
Directiva preprocessor înlocuiește linia de mai sus cu conținutul stdio.h
fiș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 #define
directiva 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 if
afirmație cu o diferență majoră.
Instrucțiunea if
este 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 #elseif
sunt 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.
#else
Directiva opțională poate fi utilizată împreună cu #if
directiva.
#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… #else
utilizarea#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