You are on page 1of 3

Kifejezsek

postfix operator

prefix operator

term

infix operator

term kvetkezk valamelyike lehet :

pl.:

nv (fggvny/adat/felsorols)
egsz konstans
lebegpontos konstans
karakter konstans
string konstans
sizeof(deklarci)
(kifejezs)

a++ * (2+c) + *p

Fogalmak (subcontexts)
Jobbrtk (rvalue): a kifejezs rtknek az elrsekor fordul el. Teszt esetn is jobb rtk kifejezst
hasznlunk.
Bal rtk (lvalue): hozzfrs az adathoz trols cljbl.
Fggvny kijells (function designator): fggvny cmnek a kiszmtsakor, vagy fggvny hvsakor
hasznljuk.
Mellkhats (side-effect): a kirtkels utn valamely vltoz rtke megvltozik. (pld, a=b; i++;)
void f(int);
int x;
f(x=3);
f fggvny kijells
3 s x=3 jobb rtk kifejezs
f(x=3) mellkhats
Plda hibkra:
0=a; /* invalid lvalue */
if( f(x) ) {....}; /* f() not rvalue ! */
Precedencia :
a*b+2*(c+d)

kiszmtsi fval brzolva:


+
*
a

*
b

+
c

d
1

Csoportosts (Nem tvesztend ssze a kirtkels sorrendjvel! ):


a+b+c+d
a=b=c=d

==>
<==

((a+b)+c)+d
a=(b=(c=d))

Pldk a kirtkels sorrendjnek definilatlansgra:


a)
y=*p++;

1. tmp=p;
2. y=*p;

p+=1;
p+=1;

y=*tmp;

b)
a=++b+2*b;
a lvalue

a
b

a=b++ + 2*b

b++
b++ + 2*b

2*b

b
id

1.

c)

b +=1;
tmp =2*b;
tmp+=b;
a=tmp;

2.

tmp=b;
tmp=2*b;
b+=1;
tmp +=b;
a=tmp;

i=++i + 2;
f()+g()
printf(%d %d %d, i++, i++, i++);

Sequence point (ezen a ponton befejezdtt egy kifejezs kirtkelse ):


utastsok kztt
logikai vagy s s kapcsolatban
fggvnyhvskor (a fggvny kdjnak vgrehajtsa eltt kirtkeldnek az argumentumok)
, kifejezst elvlaszt opertor esetn

feltteles opertornl z?a:b


Tpuskonverzik (type conversions)
A kvetkez esetek lehetnek:
egsz ellptets (promoting)
kiegyenlts (balancing)
hozzrendels (assigning)
konverzi, kasztols (type casting)
Promoting
Kivve, ha a sizeof opertor operandusa, az egsz (rvalue) kifejezs a kvetkez tpusok egyike lesz
(az rtknek megfelelen a lert sorrendben):
int
unsigned int
2

long
unsigned long

Balancing
Ktoperandus (infix) opertorok esetben, ha a kt operandus aritmetikai, akkor "kiegyenltdnek" a
tpusok a kvetkez szablyok szerint:
1. Hacsak a kt operandus nem unsigned int s long, a kiegyenltett (balanced) tpus a kt
operandus ellptetett (promoted) tpusa, amelyik ksbb fordul el a kvetkez sorrendben:
int, unsigned int, long, unsigned long, float, double, long double
2. Hacsak a kt operandus nem unsigned int s long, s a long tpus trolni kpes az
unsigned int tpus minden rtkt, a kiegyenltett (balanced) tpus long lesz
3. Minden ms esetben a a kiegyenltett (balanced) tpus unsigned long

Assigning
Hozzrendel (rtkad) opertor esetben, ha nincs tpusegyezs, megtrtnik a megfelel
tpuskonverzi az rtk trolsa eltt.
Type casting
A tpusmdost (type) opertorral vgrehajtdik az elrt tpuskonverzi.

You might also like