[ Buffy @ 27.01.2005. 12:49 ] @
| Zasto se sledeci kod ne moze kompajlirati:
Code:
int main()
{
int a=10,b=20;
return a+++++b;
}
Naravno kada stavim zagrade sve radi kako treba:
Code:
int main()
{
int a=10,b=20;
return (a++)+(++b);
}
Sto je jos cudnije i sledeci kod radi:
Code:
int main()
{
int a=10,b=20;
return a++ + ++b;
}
Zar ima razlike izmedju prvog i treceg primjera i zbog cega prvi primjer nije legalan
kada su u c++ jasno definisani prioriteti operatora???
Iste rezultate pokazuju i VC++ i DEv-C++.
Pozdrav!!! |
[ filmil @ 27.01.2005. 14:07 ] @
C FAQ
Citat:
20.20b: Is C a great language, or what? Where else could you write something like a+++++b ?
A: Well, you can't meaningfully write it in C, either.
The rule for lexical analysis is that at each point during a straightforward left-to-right can, the longest possible token is determined, without regard to whether the resulting sequence of tokens makes sense.
The fragment in the question is therefore interpreted as a ++ ++ + b and cannot be parsed as a valid expression.
References: KR1 Sec. A2 p. 179; KR2 Sec. A2.1 p. 192; ISO Sec. 6.1; HS Sec. 2.3 pp. 19-20.
[ Buffy @ 27.01.2005. 14:45 ] @
Hvala,
ali ja ipak mislim da je greska u kompajleru,jer bi jedan priblizno idealan programiski jezik kao sto je c/c++ morao da rjesi gore navedni izraz.
[ dragansm @ 27.01.2005. 15:02 ] @
Nisam pokusao da kompajliram, ali verujem da je sledece parce koda korektno...
int main()
{
int a=10,b=20;
return a+++ ++b;
}
Radi se o parsiranju najduzeg moguceg tokena kao sto je vec pomenuto...
[ Buffy @ 27.01.2005. 20:27 ] @
Da ispravno je.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.