You are on page 1of 11

UBT

Embedded Systems

Problemet dhe truqet ne “C”

Astrit ADEMAJ
Prishtinë
Agenda

C dhe burimet e gabimeve


gjate programimit
Gabimit tipike dhe veshtiresite
Aspektet e portabilitetit
Burimet e gabimeve gjate programimit

Programeri gabon
◼ Stili dhe mundesit e shprehjeve ne gjuhen C
◼ Sa eshte “robuste” gjuha perkunder gabimeve?
◼ Sa eshte gjasa qe prej nje konstrukti te
gabueshem te gjenerojme nje kontrukt valid?
◼ Cilat gabime i detekton gjuha?

Mosemarreveshjet per shkak te gjuhes


◼ p.sh. Operator Precedence
Interpretimi leksikal

if (x == y)
if (x = y) foo();
foo(); 

if ((x = y) != 0)
foo();

= nuk eshte ==
==
While (c 
= ' ' || c == 't' || c == '\n')
c = getc(f);
Interpretimi leksikal (2)

& dhe | nuk jane && dhe ||

“x“ nuk eshte ’x’

Numrat qe fillojne me shifren 0, jane numra oktal


p.sh. 10  010
Analiza leksikale
Transformimi i vargut te shkronjave ne Tokena:
y = x/*p /* eshte fillimi i nje komenti
a---b a -- - b
Deklarimet
int f, ((g)); f, ((g)) jap int
 f, g … Var. e tipit int

int ff(); ff() eshte e tipit int


 ff … funksioni, kthen int

int *g(), (*h)(); *g() = *(g())


 g … funksioni kthen pointerin ne int
 h … pointer ne funksionin qe kthen int
 *h … funksion
 Thirrja: (*h)() ose : h()
Operator precedence

Renditja nuk eshte intuitive

if (flg & FLAG)  if (flg & FLAG != 0)


 if ((flg & FLAG) != 0)

r = hi << 4 + low; /* hi << (4 + low) */

 r = (hi << 4) + low;

Te keni kujdes ta shiqoni ne tabelen me


prioritet te operacioneve
Pikepresja

if (x[i] > big);


big = x[i];
if (x[i] > big)
big = x[i]; big = x[i];

struct rec Definon main-in si funksion qe kthen


{… struct rec
}
; mungon
main() …
if else problemi

if (x == 0)
if (y == 0) err();
else
f(x,y);
if (x == 0)
{
if (x == 0) if (y == 0) err();
if (y == 0) err(); }
else else
{ {
f(x,y); f(x,y);
} }
Literature
Andrew Koenig, C Traps and Pitfalls, Addison
Wesley, 1988
Les Hatton, Safer C, McGraw-Hill, 1994
Regullat per aplikacionet kritike
MISRA, Guidelines for the Use of the C Language in
Vehicle Based Software, 1998
Hecht, et al., Review Guidelines for Software
Languages for Use in Nuclear Power Plant Systems,
US Nucl. Reg. Comm., 1997 (WWW)

You might also like