OT:patecni okenko x = y+++++y;

Jan Waclawek konfera na efton.sk
Pátek Říjen 4 18:31:16 CEST 2013


>> To y + + + y zatial nerozumiem

Uz rozumiem - prve + je normalne aditivne plus, ostatne su prefixove unarne
+, ktore "neobracaju znamienko" (zdalo by sa, ze nerobia nic, ale ouha,
vid v dalsom).

>x=y+ + ++(+y);

No ale to je tiez zle.

On ten unarny prefixovy + totiz ma za nasledok, ze sa jednak vykonaju
konverzie, a druhak sa podla 6.3.2.1#2 konverziou zmeni z lvalue na
hodnotu (takpovediac rvalue). A kedze prefixovy (aj postfixovy) ++
vyzaduje ako operator lvalue, musi to skoncit chybou, podobne, ako musi
skoncit chybou trebars
(+y) = 5;
(Zatvorka nema vplyv na lvalue-ovitost, vid 6.5.1#5)

Mimochodom, gcc 4.3.3 to prelozi, 4.7.1 uz nie, nemam nic medzi tym.

Zaujimave je, ze ani najstarsi gcc co mam neprelozil ++(-y) - co je
syntakticky uplne totozne s tym ++(+y).

wek


----- Original Message ---------------

Subject: Re: OT:patecni okenko x = y+++++y;
   From: "Milan B." <milan at bastl.sk>
   Date: Fri, 04 Oct 2013 17:42:44 +0200
     To: hw-list at list.hw.cz

>
>[xxxx at xxxx ~]# rm -f a.out ; grep "++" q.c ; gcc q.c ; ./a.out
>x=y+ + ++(+y);
>4 2
>
>he he
>
>-m-
>
>On 4. 10. 2013 17:06, Jan Waclawek wrote:
>> To y + + + y zatial nerozumiem, musim si to pozriet; ale s tym +++++ som si
>> to pamatal, to je priamo v norme - C99, 6.4#6 EXAMPLE2 The program
>> fragment x+++++y is parsed as x ++ ++ + y, which violates a constraint on
>> increment operators, even though the parse x ++ + ++ y might yield a
>> correct expression.
>>
>> Parser sa totiz podla 6.4#4 ma snazit najst najdlhsiu sekvenciu znakov,
>> ktore sa daju vyhodnotit ako "nieco zmysluplne".
>>
>> Kvoli tomu je aj ten +++y vadny, ma sa to tiez parsovat ako ++ + y.
>>
>> wek
>>



Další informace o konferenci Hw-list