Sunteți pe pagina 1din 25

Limbajul de programare C: Entităţi sintactice. Operatori.

Expresii. Instrucţiuni.

Grigore ALBEANU
g.albeanu.mi@spiruharet.ro

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 1


Limbajul C, Partea I
Agenda
◼ Setul de caractere (Alfabetul)
◼ Elementele lexicale ale limbajului C: separatori, identificatori,
cuvinte cheie și rezervate, simboluri speciale, literali.
◼ Declarații: rolul identificatorilor, semantica declarațiilor,
constante magice (prin macrodefiniții), entități const
◼ Declaratii de variabile: atribute, legarea variabilelor, domeniul de
vizibilitate, clase de memorare (part. 1)
◼ Definire (declarare + inițializare)
◼ Tipuri de date fundamentale
◼ Operatori
◼ Instrucțiuni

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 2


Limbajul C, Partea I
Lexicul limbajului C
◼ Programele C sunt propoziții formate cu
simboluri ale alfabetului C: atomi lexicali
(tokens) și separatori.
◼ Atomii lexicali: se construiesc folosind
simboluri grafice și sunt din categoriile:
identificatori, constante, operatori, semne de
punctuație.
◼ Se utilizează o parte a codul ASCII: litere
mari și mici ale alfabetului englez, cifre
arabe și unele semne speciale. Semnele
speciale se referă la operatori sau semne de
punctuație, operatori din două simboluri
(token unic), entități folosite de preprocesor
(#, ##).
◼ Separatorii: separatori uzuali (spațiu,
tabulator orizontal, retur de car, linie nouă,
salt de pagina.
◼ Comentariile: linie (C++), text (C)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 3


Limbajul C, Partea I
Identificatori și cuvinte cheie
◼ Identificator – secvență de
litere și cifre din alfabetul
limbajului, primul caracter
este literă [mare, mică] sau
semnul de subliniere (‘_’).
Reprezintă: nume de
variabile, macros, struct,
typedef, enum sau etichete.
◼ Lungimea maximă a
identificatorilor (depinde de
implementare)
◼ Categorii de identificatori:
predefiniți, definiți de
utilizator
◼ Identificatorii predefiniti:
cuvinte cheie (proprii
limbajului), cuvinte
rezervate (proprii
compilatorului: nume de
registre, moduri de
compilare etc.).
◼ ANSI: enum, const,
signed, void, volatile
Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 4
Limbajul C, Partea I
Literali
◼ Un literal este fie
constanta intreaga,
fie constanta
caracter, fie
constanta in virgula
mobila, fie sir de
caractere “…”.
◼ Constantele intregi
sunt formate din
cifre ale bazei 10
(nu incep cu zero),
bazei 8 (incep cu 0),
si ale bazei 16
(incep cu 0x sau
0X). Tipul
constantelor intregi
depinde de forma,
valoarea si sufixul
acestora.

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 5


Limbajul C, Partea I
Tipuri întregi
limits.h
◼ #define SCHAR_MIN (-128)
◼ #define SCHAR_MAX 127
◼ #define UCHAR_MAX 255
◼ #define INT_MAX 2147483647
◼ #define INT_MIN (-INT_MAX-1)
◼ #define UINT_MAX 0xffffffff
◼ #define SHRT_MAX 32767
◼ #define SHRT_MIN (SHRT_MAX-1)
◼ #define USHRT_MAX 0xffff
◼ #define LONG_MA2147483647L
◼ #define LONG_MIN (LONG_MAX-1)
◼ #define ULONG_MAX 0xffffffffUL

https://www.tutorialspoint.com/c_standard_library/limits_h.htm
Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 6
Limbajul C, Partea I
Constantele http://ascii-table.com/pronunciation-
guide.php
‘caracter’
◼ Sunt formate din unul sau
mai multe caractere
incluse între apostrofuri.
Pentru un caracter, tipul
constantei este char, iar
valoarea este
reprezentată de codul
ASCII.
◼ Daca sunt mai multe
caractere, între
apostrofuri, tipul
constantei este int, iar
valoarea depinde de
implementare.
◼ Constantele predefinite
sunt reprezentate de
secventele speciale
(escape).
http://www.asciitable.com/index/asciifull.gif

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 7


Limbajul C, Partea I
Constantele IEEE 754
◼ Aceste constante
sunt compuse din
semn, parte
întreagă, punct
zecimal, parte
fracționară, marcajul
pentru exponent (e
sau E) și exponentul
ca întreg cu semn.
◼ Partea întreaga sau
partea fracționară
pot lipsi (nu ambele).
◼ Punctul zecimal sau
marcajul exponențial
pot lipsi (nu ambele).

https://en.wikipedia.org/wiki/IEEE_754

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 8


Limbajul C, Partea I
NaN
+/-
Tipurile IEEE 754 Infinity

◼ float.h
◼ math.h

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 9


Limbajul C, Partea I
Constantele șir de caractere
◼ String.h
◼ Au tipul char[].
◼ Au clasa de memorare static
◼ “null-terminating string”
◼ Un șir de n caractere va ocupa n+1
octeți.
◼ Unicode (Java – 2 octeți)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 10


Limbajul C, Partea I
Rolul identificatorilor
◼ Nume pentru diversele
entități ale unui
program: constante
magice (preprocesor C),
entități const, tipuri de
date (alias prin typedef),
variabile, funcții,
câmpuri de uniuni și
structuri, inclusiv
câmpuri de biți.
◼ Au un domeniu de
vizibilitate (fișier: static,
bloc, prototip funcție,
date globale)
◼ Cuvinte cheie: static,
extern

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 11


Limbajul C, Partea I
Semantica declarațiilor
◼ Unei entități const i se asociază un obiect (în
memorie…), același pe tot parcursul executării
programului. Conținutul acestei entități este cu
acces Read Only. Entitățile const sunt obligatoriu
initializate.
◼ O variabilă are asociată o locație de memorie
care poate conține obiecte din domeniul de
definitțe al variabilei. Adresa variabilei este poziția
de la care începe alocarea spațiului necesar
(sizeof…). Conținutul locației este cu acces
Read-Write. Variabilele pot fi inițializate.
◼ Informatia de tip specificată unei constante sau
variabile determină natura operațiilor care pot
acționa asupra acestor entități.
◼ Constantele magice sunt supuse operației de
substituție în faza de preprocesare (expandarea
macro-urilor). În generarea codului sunt tratate ca
și literali.
◼ Variabilele statice locale funcțiilor își păstrează
spațiul de alocare (și valoarea) de la un apel la
altul, pe toată durata executării programului:
reprezintă “memoria de date” a funcției.
Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 12
Limbajul C, Partea I
Operatori (1)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 13


Limbajul C, Partea I
Operatori (2)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 14


Limbajul C, Partea I
Operatori (3)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 15


Limbajul C, Partea I
Operatori (4)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 16


Limbajul C, Partea I
Operatori (5)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 17


Limbajul C, Partea I
Operatori (6)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 18


Limbajul C, Partea I
Operatori (7)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 19


Limbajul C, Partea I
Expresii. Precedența

Tipuri intregi:
Operațiile aritmetice sunt comutative, asociative;
există element neutru; nu orice element are și opus.
Tipuri IEEE 754:
Operațiile aritmetice nu sunt asociative
Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 20
Limbajul C, Partea I
Instrucțiuni C (1)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 21


Limbajul C, Partea I
Instrucțiuni C (2)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 22


Limbajul C, Partea I
Instructiuni (3)

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 23


Limbajul C, Partea I
Instructiuni (4)

http://www.trytoprogram.
com/c-programming/c-
programming-user-
defined-functions/

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 24


Limbajul C, Partea I
“Obfuscated code”
◼ “Obfuscated code is source or machine code that has been made
difficult to understand. Programmers may deliberately obfuscate code
to conceal its purpose (a form of security through obscurity), to deter
reverse engineering, or as a puzzle or recreational challenge for
readers. Programs known as obfuscators transform human-readable
code into obfuscated code using various techniques. “
http://en.wikipedia.org/wiki/Obfuscated_code
◼ The International Obfuscated C Code Contest : http://www.ioccc.org/
◼ ACM International Collegiate Programming Contest:
http://cm.baylor.edu/welcome.icpc

https://en.wikipedia.org/wiki/Obfuscation_(software)

https://en.wikipedia.org/wiki/International
_Obfuscated_C_Code_Contest

Versiunea 2018 G. Albeanu, Fundamentele programarii - M3, 25


Limbajul C, Partea I

S-ar putea să vă placă și