Directiva define este utilizata pentru a face un program mai usor de parcurs. Sa privim la urmatorul exemplu:
#define TRUE 1 #define FALSE 0 #define NULL 0 #define AND & #define OR | #define EQUALS == gata = TRUE;
Directiva preprocesor incepe cu simbolul # si nu este terminata cu ';'. In mod uzual directivele preprocesor sunt scrise la inceputul fisierului sursa.
Directivele preprocesor sunt prelucrate de catre compilator inainte de compilarea acestuia. Toate directivele sunt procesate mai intii iar simbolurile ce apar in cadrul programului sunt inlocuite de valoarea lor. De abia dupa aceasta, programul este compilat.
In general, directivele preprocesor sunt scrise cu litere mari
Macroinstructiuni
Identificatorul definit prin # define poate fi substituit cu o instructiune.
Exemplu:
# define SCRIE(n) printf("%.2f \n",n); main() { float n1=3.12; SCRIE(n1); }
In acest program preprocesorul va inlocui expresia SCRIE(n1) o va inlocui cu printf("%.2f \n",n1);
De asemenea, #define poate fi folosita pentru a declara constante simbolice.
# define RAD2 1.41 float x; ........... x=RAD2*15; ...........
Nu se pot atribui valori constantelor simbolice.
Exercitiu
Fie urmatorul program. Unde avem eroarea?
#include <stdio.h> #define TVA 0.22; main() { float b,n; b = 72.10; n = (b * TVA )+b; printf("Noul pret cu TVA pentru %.2f este %.2f\n",b,n); }
Recapitulare pentru #define
Directiva catre preprocesor include determina includerea unui fisier sursa in alt fisier sursa.
Directiva
#include <stdio.h>
va cauta fisierul stdio.h in caile specificate in IDE.
pe cind
#include "stdio.h"
va cauta fisierul stdio.h in directorul curent. '.h' este extensia standard a fisierelor de tip header.
Operatie | Operator | Comentariu | Valoarea lui a inainte | Valoarea lui a dupa |
Inmultire | * | a = a * 2; | 4 | 8 |
Impartire | / | a = a / 2; | 4 | 2 |
Suma | + | a = a + 2; | 4 | 6 |
Scadere | - | a = a -2; | 4 | 2 |
Modul | % | a = a % 3; | 4 | 1 |
Exemplu :
#include <stdio.h> main() { int a = 50; float mod; mod = a % 10; printf("Restul %% lui %d prin impartire la 10 este %f\n",a,mod); }
Operatorii de atribuire aritmetica sunt de tipul :
v op= const;unde op este dintre operatorii aritmetici anteriori si este echivalent cu
v = v op const;
Sunt o prescurtare a instructiunilor de tipul v = v + 1 sub forma:
v++; --v;
Analog pentru decrementare.
Permit stabilirea unei relatii de ordine intre variabile. Operatorii relationali sunt:
Se poate spune ca valoarea 0 se genereaza atunci cind relatia este falsa si se genereaza 1
atunci cind relatia este adevarata.
Datorita formatului lor, este foarte greu de verificat egalitatea dintre doua numere flotante.
In programe este bine sa se evite acest lucru deoarece rezultatele pot fi imprevizibile. Totusi
se poate face urmatoarea verificarea: consideram ca cele doua numere sunt egale daca modulul
diferentei dintre cele doua este mai mic decit o valoare eps constanta.
Acesti operatori se pot aplica numai la tipuri intregi.
Deplasarea la stinga completeaza la dreapta cu 0, pe cind deplasarea la dreapta poate completa
fie cu 0 fie cu bitul de semn depinzind de tipul operandului (cu sau fara semn).