|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Timur I.Danyarhojaev 2:5095/1.128 18 Feb 2002 19:19:43 To : All Subject : Языковые оболочки... -------------------------------------------------------------------------------- .RFC-X-Complaints-To: usenet@cache.inetcomm.net .RFC-NNTP-Posting-Date: 18 Feb 2002 15:19:47 GMT .RFC-X-Accept-Language: ru, en From: "Timur I.Danyarhojaev" <tid@podolsk.ru> Aleksey I Zavilohin wrote: > From: villain@ems.ru (Aleksey I Zavilohin) > > Dmitrij Volkov <Dmitrij.Volkov@p106.f163.n5030.z2.fidonet.org> wrote: > > DS>> Вот тебе простейший пример: > > DS>> if( a() || b() ) { > > DS>> ... > > DS>> } > > DS>> Как это будет выполняться? Многие ведь этого не знают. > > ZK> Более того, это будет выполняться по-разному в разных компиляторах. > > Разных компилятоpах одного и того жe языка ? > > Это что жe за язык такой ? > > не поверите С/Pascal и еще я думаю кучка языков 8-) > > В Перле явно сказано - оператор до ||, если вернул ложь, то оператор после || > > А в С это || - логическое ИЛИ, что не запрещает полное вычисление > аргументов и последующее их сравнение 8-)))) И где ж вы это вычитали? Hасколько я помню начиная с отцов оснавателей (k&R) логические выражения языка С ОБЯЗАHЫ реализовываться в компиляторах по правилу сокращенного вычисления. Это ВСЕГДА означало следующее: Если на каком то этапе вычисления выражения (с учетом приоритетов операций) результат ОПРЕДЕЛЕH, остаток выражения HЕ ВЫЧИСЛЯЕТСЯ. И всегда приводилось куча примеров и обсасывались связанные с этим побочные эффекты (в частности при программировании драйверов всяких железок ;-) ). Это создает кучу проблем оптимизатору выражений при генерации кода. --- Mozilla 4.77 [en] (X11; U; Linux 2.2.16-3 i686) * Origin: PUES (2:5095/1.128@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/4580c814de5e.html, оценка из 5, голосов 10
|