|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Igor Chumak 2:5020/400 03 Nov 2003 12:20:57 To : Alexandr Molchevsky Subject : Re: Kylix крек -------------------------------------------------------------------------------- Hello, Alexandr! You wrote to Vasya Kruglov on Sun, 02 Nov 2003 11:58:57 +0300: AM> Hello Vasya. AM> 01 Nov 03 11:53, you wrote to me: AD>>>> ну и что? крутые фидошные гуру - они на то и крутые гуру, чтоб AD>>>> трындеть о высоких материях в эхах. ты, видимо, просто новенький. AM>>> Hу если это высокие материи : AM>>> int i=1; AM>>> i=(++i)+(++i)+(++i); AM>>> А ведь каждый компилятор имеет свое мнение о том как это AM>>> должно работать. Hапример MSVC++ даже два разных мнения имеет, AM>>> одно для отладочного режима второе для релиза. И оба неправильные. AM>>> :) VK>> Я не знаю, какие мнения у MSVC, но мое мнение такое: это пример не VK>> "невысоких материй", а обыкновенного... какое бы слово поцензурнее VK>> подобрать... идиотизма. Причем в медицинском смысле :-)) AM> Это ты такой умный потому что тут сразу видно что это AM> "идиотизм", а когда у тебя в подобное разворачивается выражение из AM> макросов, например, то так сразу не скажешь. VK>> P.S. Есть примеры, когда подобные конструкции (с неочевидным VK>> результатом) оправданы, т.е. их нельзя заменить на код, который VK>> может быть понят лишь единственным образом? AM> Легко! Вот "чудесное" наблюдение от Антона Москаля: AM> = SU.C_CPP (2:4656/7.2) AM> ======================================================= AM> Msg : 16 of 51 AM> From : Anton Moscal 2:5020/400 19 Sep AM> 03 15:57:45 AM> To : All AM> Subj : Side effects AM> ===================================================================== AM> ========== AM> From: "Anton Moscal" <msk@mail.tepkom.ru> AM> Hello, All! AM> Вопрос для широкой публики - являтеся ли данная программа корректной AM> программой на С (в частности - что она должна вывести на печать?) AM> =================== AM> int stack [100]; AM> int *p = stack; AM> void push (int v) { *p++ = v; } AM> int pop (void) { return *--p; } AM> int add (void) { int i = pop (); return i + pop (); } AM> int fn (int c) { return c*10; } AM> # include <stdio.h> AM> int main (void) AM> { AM> printf ("%d, %d\n", fn ((push (1), push (2), add AM> ())), fn ((push (3), push (4), add ())) AM> ); AM> return 0; AM> } AM> ==================== AM> Лично я склонен думать, что данная программа undefined, но для меня AM> это было неожиданностью. Hикогда не смогу понять, что заставляет людей придумывать себе грабли ;-)) Конструкция типа push (1); push (2); int a=add(); push (3); push (4); int b=add(); printf(("%d, %d\n",a,b); дольше пишется или медленнее работает? Или если код понятен только автору, то это коссвенный признак крутизны? ;-) /* Сам не сишник, возможно автор примера имел в виду что-то другое, но я считаю, что если уж ЗАДОКУМЕHТИРОВАHО (а это ведь даже в учебнике по С есть , что порядок вычисления аргументов функции определяет компилятор) то не надо на это наступать. Я вот например даже скобки в арифметических выражениях всегда расставляю ;) То что С позволяет любой алгоритм оформить в виде ребуса - это ж не повод использовать такую "фичу" ;-)) */ With best regards, Igor Chumak. E-mail: igor()g-auto.pul.kiev.ua --- ifmail v.2.15dev5 * Origin: Adamant ISP news server (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/120346535467c.html, оценка из 5, голосов 10
|