Professional Documents
Culture Documents
Expressions in Standard C
Expressions in Standard C
postfix operator
prefix operator
term
infix operator
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)
*
b
+
c
d
1
==>
<==
((a+b)+c)+d
a=(b=(c=d))
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++);
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.