the ++ operator
Giannis Vrentzos
gvre at gvre.gr
Thu Nov 20 08:07:01 EET 2003
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++] με
> κάποια συγκεκριμένη σειρά, οπότε στο a[i] μπορεί το i να έχει ήδη
Eixa thn enthpwsh pws h pra3eis 8a ginotan apo aristera pros ta de3ia
kai oxi me tyxaia seira opws les. Opws apodeix8hke, eixa la8os entypwsh
:). Oso zei kaneis, ma8ainei ;)
> προσαυξηθεί, μπορεί και όχι. Φυσικά, το ίδιο ακριβώς ισχύει αν έχουμε
> ++i, δεν αλλάζουν και πολλά. Η ουσία είναι ότι τέτοιες παραστάσεις
> έχουν undefined behaviour, όπως λέμε, δηλαδή ο compiler κάνει ό,τι
> γουστάρει, οπότε δε βασιζόμαστε και τις γράφουμε κάπως αλλιώς.
>
Gvre
More information about the Linux-greek-users
mailing list