|
Re: lug-bg: c/cpp incr/decr
- Subject: Re: lug-bg: c/cpp incr/decr
- From: Nikolay Mitev <nikolaymitev@xxxxxxx>
- Date: Tue, 18 Jan 2005 14:20:16 +0200
Vasil Kolev wrote:
On вт, 2005-01-18 at 12:04 +0200, Nikolay Mitev wrote:
Vasil Kolev wrote:
Нали знаеш вица "Докторе, като правя така, ме боли" "Ами не прави
така" :) ...Смесването на префиксния и постфиксния оператор в/у една и
съща променлива в един израз не е ясно какво дава, както например не е
ясно какво прави
a+++b (т.е. дали е (a++) +b или a+(++b) ).
Не е така. По стандарт копилаторът е длъжен да парсне най-дългия токен,
дори това да води до синтактична грешка. Т.е. а+++b задължително трябва
да се парсне като (а++) +b.
Примерно в c++ стандарта е даден примера (2.4.5)
a+++++b се парсва като а++ ++ +b, и дава синтактична грешка, въпреки че
ако се парсне като
а++ + ++b няма да има грешка.
В C++ може, но в C е недефинирано като поведение, като бях първи курс и
си нямахме друга работа, експериментирахме с няколко компилатора и
няколко архитектури, това даваше различни резултати.
Айде сега.
Из драфт на C
std:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n843.htm
[#6] EXAMPLE 2 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.
"Форматирането е изгубено, но в pdf-a е точно както в c++ std"
'nuff said
cheers,
face
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================
|
|
|