CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: CodeVision AVR в вопросах и ответах

Сообщение wellcom »

Мастер Ломастер писал(а):
работать-то может и работает, и даже понятно, почему именно (компилятор ни при чем)... но вообще это не хорошо - битовые и логические опреации это разные вещи! тем более что стандарт Си, если я не ошибаюсь, не устанавливает однозначно, что истинным выражением логической операции всегда должно быть число 1 - по идее может быть ЛЮБОЕ НЕНУЛЕВОЕ число, и тогда разница в работе & и && будет очень заметна.

Учтем сей ньюанс... :)
:solder: 32-х ядерный процессор из П213В
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

Мастер Ломастер писал(а):во-первых, если следовать стандарту языка Си, то ответ неопределен, т.к. стандарт не устанавливает порядка вычисления операндов в выражении. если учесть, что CVAVR не очень озабочен соблюдением стандартов, можно предположить, что вычисляться будет слева направо - но это чисто мои домыслы.
А вот WinAVR, строго следуя станартам Си, всегда делает это неопределенно, не переставая удивлять программиста :)))
А по делу, если важен порядок, просто сделайте вложенные проверки, хуже точно не будет:

Код: Выделить всё

if (условие)
{
    if (условие)
    {
    }
}
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):
Мастер Ломастер писал(а):во-первых, если следовать стандарту языка Си, то ответ неопределен, т.к. стандарт не устанавливает порядка вычисления операндов в выражении. если учесть, что CVAVR не очень озабочен соблюдением стандартов, можно предположить, что вычисляться будет слева направо - но это чисто мои домыслы.
А вот WinAVR, строго следуя станартам Си, всегда делает это неопределенно, не переставая удивлять программиста :)))
лично меня поведение WinAVR не удивляет совершенно. что именно на этот раз вас не устроило?
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

Железные нервы. Меня неопределенность просто в ступор вводит :)))
И это, советую "освежить знания", и не по народным домыслам. Последовательность определена железно, и выполняться будет слева направо. Хот нет, не "будет", а "должно" :). Т.к. забытый автором один знак '&' сводит всю прелесть логических операций на нет )
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):И это, советую "освежить знания", и не по народным домыслам.

с удовольствием сделаю это: дайте мне, пожалуйста, ссылку на стандарт С99 в русском переводе. или хотя бы на ANSI C самой свежей редакции, но опять же, на русском. а то с английским тяжко...
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

:))) я бы и сам от такого не отказался. Да и не требовательный я, мне и K&R хватает, верю им безоговорочно )
Большая часть вопросов, касающихся С отпала бы, после прочтения книг этих авторов. Но ведь не читают же :dont_know:
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а)::))) я бы и сам от такого не отказался. Да и не требовательный я, мне и K&R хватает, верю им безоговорочно )
Большая часть вопросов, касающихся С отпала бы, после прочтения книг этих авторов. Но ведь не читают же :dont_know:

во-первых, они были авторами самой первой версии Си, а стандарт С99 содержит уже много чего такого, о чем отцы-основатели и не думали.
во-вторых, где же K&R утверждают, что в выражении A + B + C (где А,В и С - тоже выражения) обязательно А будет вычислено самым первым, затем будет вычислено А+В, и только затем будет вычислено С? дайте ссылку хотя бы на это... плюсами я обозначаю любые равноприоритетные операции, не обязательно сложение и т.п. кстати, в качестве выражения может быть и функция - не забывайте.
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

1. Ну вам видней. Пока расхождений с действительностью не замечал.
2. Я такого и не утверждал :dont_know:
А вот в выражении A && B && C , изначально будет выполненно А, если оно будет истинно, то B, если и оно истинно то C. И не важно что кроется под A, B, C.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):Я такого и не утверждал :dont_know:
А вот в выражении A && B && C , изначально будет выполненно А, если оно будет истинно, то B, если и оно истинно то C. И не важно что кроется под A, B, C.

правильно ли я вас понял, что в выражении A && B && 0x00 всегда будет вычислено А, затем В и только после этого компилятор выяснит, что все вычисления фтопку?

P.S. я как-то привык смотреть на вещи шире: если В ОБЩЕМ порядок вычисления ВЫРАЖЕНИЙ не определен, то и ЧАСТНЫЙ СЛУЧАЙ выражения так же неизвестно в каком порядке будет вычислен. прав я или нет - вот тут бы стандарт на русском и не помешал бы...
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

А как связан компилятор и порядок действия в С? Если бы компилятор работал строго соблюдая правила, то так бы он и должен был поступить.
Не надо строить догадок этот вопрос доступным языком описан K&R , например почитайте это: "Язык программирования С", издание второе, 2009 год.
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: CodeVision AVR в вопросах и ответах

Сообщение wellcom »

В общем выходит так: во что хочешь верить, в то и верь! :facepalm:
..т.е.как я для себя пойму, так и приму...
а перечитать книги - хорошее дело, но сколько же времени нужно !!!!! :o
:solder: 32-х ядерный процессор из П213В
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

Я неудачно выразился. Если истинность/ложность выражения становится известной на момент компиляции, то логично что все это будет выкинуто компилятором. Но тогда и самого выражения при выполнении не будет, и порядок уже определять негде :dont_know:
Последний раз редактировалось BerZerK-ku Пт янв 20, 2012 11:38:34, всего редактировалось 1 раз.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):А как связан компилятор и порядок действия в С? Если бы компилятор работал строго соблюдая правила, то так бы он и должен был поступить.
дык вроде я так и сказал изначально: кто его знает, этот компилятор, как он поступит :)))

просто мне кажется, что стандарт умалчивает об этом, либо явно сообщает о неопределенности порядка вычислений: вроде когда-то об этом признанные гуру говорили, вот я и запомнил. а книга сама по себе не может быть аргументом, если эта книга - не публикация стандарта :)
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

Работаю от противного: K&R всегда правы, пока не доказано обратное :))) А доказательств обратного как раз и нет.
Как поступит компилятор я тоже не знаю, а вот что по этому поводу говорится в языке знаю.
Последний раз редактировалось BerZerK-ku Пт янв 20, 2012 11:41:28, всего редактировалось 1 раз.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):Если истинность/ложность выражения становится известной на момент компиляции, то логично что все это будет выкинуто компилятором.

вообще говоря, это "логичное действие" оговорено стандартом, а значит косвенно подтверждает мою точку зрения: порядок вычисления может быть изменен компилятором, лишь бы результат был правильным. под правильным результатом я опять-таки понимаю нечто, полученное определенными стандартом действиями. математически от перестановки мест слагаемых сумма не меняется - очевиднонаверное, этот факт лежит в основе этой неопределенности :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):Как поступит компилятор я тоже не знаю, а вот что по этому поводу говорится в языке знаю.
не так давно вы утверждали прямо противоположное: я знаю, как делает компилятор, и в общем-то мне плевать, что там сказано в языке Си по этому поводу :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

:dont_know: Разве я говорил что в Си такого нет или согласно современным стандартом это не определено?
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение BCluster »

Лишь бы срач развести (:
Какая на фиг разница в каком порядке происходят вычисления если от изменения этого порядка результат не меняется?
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: CodeVision AVR в вопросах и ответах

Сообщение BerZerK-ku »

Одно из предположений: скорость вычисления. Самое вероятное в начало, самое невероятное в глубинку )
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Мастер Ломастер »

BCluster писал(а):Лишь бы срач развести (:
Какая на фиг разница в каком порядке происходят вычисления если от изменения этого порядка результат не меняется?
в конкретно взятом случае (что ТС описал) разницы, может, и нет, но говоря абстрактно (как я люблю - обобщая) она может быть: если в одном из выражений есть функция, меняющая глобальные переменные, например. глобальниыми переменными частенько грешат многие программы, и от того, КОГДА они изменены, может зависеть очень многое.
битва с дураками проиграна, победители торжествуют. слава победителям!
Ответить

Вернуться в «AVR»