[Uneex] Re: [Uneex] Что позволяет C
Peter Novodvorsky
uneex@cs.msu.su
17 Dec 2001 11:35:46 +0300
Greetings.
>>>>> "Mike" == Mike E Matsnev <mike@po.cs.msu.su> writes:
Mike> On Mon, Dec 17, 2001 at 10:55:07AM +0300, Vladimir Prus
Mike> wrote:
>> > Читая документ от том, как надо и не надо оформлять >
>> программы на C, наткнулся на следующий образец народного
>> творчества
>> >
>> >
>> > int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
>> > o, world!\\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
>> > -- Dishonorable mention, Obfuscated C Code Contest, 1984. >
>> Author requested anonymity.
>> >
>> >
>> > Лично меня больше всего поразило выражение вида int[char*].
>> > Как это компиллятор собирает, остается только удивляться.
>>
>> Никаких проблем -- char* неявно преобразуется в int. Впрочем, в
>> C++ такое работать не будет... и возможно не будет работать в
>> ANSI C. Ни у кого стандарта нет? :-)
Mike> Даа... Из K&R: ======= Rather more surprising, at first
Mike> sight, is the fact that a reference to a[i] can also be
Mike> written as *(a+i). In evaluating a[i], C converts it to
Mike> *(a+i) immediately; the two forms are equivalent. =======
Однако про i[a] тут ничего сказано не было.
Mike> Ну и "abcd"[2]==2["abcd"] В ANSI C это работает, в C++
Mike> вариант 2["abcd"] запрещен.
см выше.
--
Peter Novodvorsky.
Moscow State University, CS faculty -- nidd@cs.msu.su
Debian Project -- nidd@debian.org
ALT Linux Team, Russia -- nidd@alt-linux.net