the ++ operator
Aggelos Economopoulos
aoiko at cc.ece.ntua.gr
Thu Nov 20 03:49:37 EET 2003
On Thursday 20 November 2003 01:27, Vasilis Vasaitis wrote:
> On Wed, Nov 19, 2003 at 11:40:00PM +0200, Giannis Vrentzos wrote:
> > Tom Diamond wrote:
> > >Ρε παιδιά, τρέχω το παρακάτω:
>
> ..[snip]..
>
> > > printf("%f\n", c);
> > >
> > > c = 0.0; i = 0;
> > > c += a[i]+b[i++] + a[i]+b[i];
> >
> > ****** To i ^^^^ 8a ay3h8ei kata 1 meta to telos ths pros8eshs*****
> > c = c + a[0] + b[0] + a[0] + b[0]
> > c = 0.0 + 0.1 + 4.1 + 0.1 + 4.1
> >
> > Thn grammh ayth mporeis na thn kaneis c += a[i]+b[i]+a[++i]+b[i] kai 8a
> > exeis to swsto apotelesma alla kalytera na apofygeis ayton ton tropo.
>
> Πωπω, είστε τελείως φονιάδες και οι δύο. Τέτοιες παραστάσεις σαν
> αυτές που γράφετε για το c += ... είναι τελείως άτοπες, γιατί πολύ
> απλά δεν υπάρχει καμία εγγύηση για τη σειρά με την οποία θα υπολογίσει
> ο compiler τα επιμέρους ορίσματα της πρόσθεσης. Δηλαδή, όταν γράφουμε:
>
> c = a[i] + b[i++];
>
> τότε ο compiler δεν υποχρεούται να υπολογίσει τα a[i] και b[i++] με
> κάποια συγκεκριμένη σειρά,
Gia na dwsw akoma megaluterh emfash: o compiler den upoxreoutai *kan* na kanei
to increment sto i - gia thn akribeia apo th stigmh pou phre san input
programma me _undefined_ behaviour, o compiler den exei pleon kamia upoxrewsh
apenanti sto xrhsth.
Obligatory True Story(tm), apo to Expert C Programming (PvdL): ta #pragma
directives exoun _implementation_defined_ sumperifora (oem: o compiler
mporei na kanei o, ti 8elei, alla ofeilei na prosdiorizei sto documentation
th sumperifora pou epele3e). Sthn ekdosh (shkwnetai apo thn karekla,
petagetai ws th biblio8hkh) 1.34, o gcc eixe thn e3hs sumperifora:
do_pragma(){
/* ... */
execl("/usr/games/hack", "#pragma, 0);
execl("/usr/games/rogue", "#pragma, 0);
execl("/usr/new/emacs", "-f", "hanoi", "9", "-kill", 0);
execl("/usr/local/emacs", "-f", "hanoi", "9", "-kill", 0);
fatal("You are in a maze of twisty compiler features, all different");
}
IOW, eimaste mallon tuxeroi me ta warnings - o gcc dikaoutai na einai arketa
pio aggressive an sunanthsei undefined behaviour (e.g. system("rm -rf ~");
etc.)
More information about the Linux-greek-users
mailing list