Учтем сей ньюанс...Мастер Ломастер писал(а):
работать-то может и работает, и даже понятно, почему именно (компилятор ни при чем)... но вообще это не хорошо - битовые и логические опреации это разные вещи! тем более что стандарт Си, если я не ошибаюсь, не устанавливает однозначно, что истинным выражением логической операции всегда должно быть число 1 - по идее может быть ЛЮБОЕ НЕНУЛЕВОЕ число, и тогда разница в работе & и && будет очень заметна.
CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
- Реклама
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: CodeVision AVR в вопросах и ответах
А вот WinAVR, строго следуя станартам Си, всегда делает это неопределенно, не переставая удивлять программистаМастер Ломастер писал(а):во-первых, если следовать стандарту языка Си, то ответ неопределен, т.к. стандарт не устанавливает порядка вычисления операндов в выражении. если учесть, что CVAVR не очень озабочен соблюдением стандартов, можно предположить, что вычисляться будет слева направо - но это чисто мои домыслы.
А по делу, если важен порядок, просто сделайте вложенные проверки, хуже точно не будет:
Код: Выделить всё
if (условие)
{
if (условие)
{
}
}-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
лично меня поведение WinAVR не удивляет совершенно. что именно на этот раз вас не устроило?BerZerK-ku писал(а):А вот WinAVR, строго следуя станартам Си, всегда делает это неопределенно, не переставая удивлять программистаМастер Ломастер писал(а):во-первых, если следовать стандарту языка Си, то ответ неопределен, т.к. стандарт не устанавливает порядка вычисления операндов в выражении. если учесть, что CVAVR не очень озабочен соблюдением стандартов, можно предположить, что вычисляться будет слева направо - но это чисто мои домыслы.![]()
битва с дураками проиграна, победители торжествуют. слава победителям!
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: CodeVision AVR в вопросах и ответах
Железные нервы. Меня неопределенность просто в ступор вводит
И это, советую "освежить знания", и не по народным домыслам. Последовательность определена железно, и выполняться будет слева направо. Хот нет, не "будет", а "должно"
. Т.к. забытый автором один знак '&' сводит всю прелесть логических операций на нет )
И это, советую "освежить знания", и не по народным домыслам. Последовательность определена железно, и выполняться будет слева направо. Хот нет, не "будет", а "должно"
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
с удовольствием сделаю это: дайте мне, пожалуйста, ссылку на стандарт С99 в русском переводе. или хотя бы на ANSI C самой свежей редакции, но опять же, на русском. а то с английским тяжко...BerZerK-ku писал(а):И это, советую "освежить знания", и не по народным домыслам.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: CodeVision AVR в вопросах и ответах
Большая часть вопросов, касающихся С отпала бы, после прочтения книг этих авторов. Но ведь не читают же
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
во-первых, они были авторами самой первой версии Си, а стандарт С99 содержит уже много чего такого, о чем отцы-основатели и не думали.BerZerK-ku писал(а):я бы и сам от такого не отказался. Да и не требовательный я, мне и K&R хватает, верю им безоговорочно )
Большая часть вопросов, касающихся С отпала бы, после прочтения книг этих авторов. Но ведь не читают же
во-вторых, где же K&R утверждают, что в выражении A + B + C (где А,В и С - тоже выражения) обязательно А будет вычислено самым первым, затем будет вычислено А+В, и только затем будет вычислено С? дайте ссылку хотя бы на это... плюсами я обозначаю любые равноприоритетные операции, не обязательно сложение и т.п. кстати, в качестве выражения может быть и функция - не забывайте.
битва с дураками проиграна, победители торжествуют. слава победителям!
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: CodeVision AVR в вопросах и ответах
1. Ну вам видней. Пока расхождений с действительностью не замечал.
2. Я такого и не утверждал
А вот в выражении A && B && C , изначально будет выполненно А, если оно будет истинно, то B, если и оно истинно то C. И не важно что кроется под A, B, C.
2. Я такого и не утверждал
А вот в выражении A && B && C , изначально будет выполненно А, если оно будет истинно, то B, если и оно истинно то C. И не важно что кроется под A, B, C.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
правильно ли я вас понял, что в выражении A && B && 0x00 всегда будет вычислено А, затем В и только после этого компилятор выяснит, что все вычисления фтопку?BerZerK-ku писал(а):Я такого и не утверждал![]()
А вот в выражении A && B && C , изначально будет выполненно А, если оно будет истинно, то B, если и оно истинно то C. И не важно что кроется под A, B, C.
P.S. я как-то привык смотреть на вещи шире: если В ОБЩЕМ порядок вычисления ВЫРАЖЕНИЙ не определен, то и ЧАСТНЫЙ СЛУЧАЙ выражения так же неизвестно в каком порядке будет вычислен. прав я или нет - вот тут бы стандарт на русском и не помешал бы...
битва с дураками проиграна, победители торжествуют. слава победителям!
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: CodeVision AVR в вопросах и ответах
А как связан компилятор и порядок действия в С? Если бы компилятор работал строго соблюдая правила, то так бы он и должен был поступить.
Не надо строить догадок этот вопрос доступным языком описан K&R , например почитайте это: "Язык программирования С", издание второе, 2009 год.
Не надо строить догадок этот вопрос доступным языком описан K&R , например почитайте это: "Язык программирования С", издание второе, 2009 год.
Re: CodeVision AVR в вопросах и ответах
В общем выходит так: во что хочешь верить, в то и верь!
..т.е.как я для себя пойму, так и приму...
а перечитать книги - хорошее дело, но сколько же времени нужно !!!!!
..т.е.как я для себя пойму, так и приму...
а перечитать книги - хорошее дело, но сколько же времени нужно !!!!!
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: CodeVision AVR в вопросах и ответах
Я неудачно выразился. Если истинность/ложность выражения становится известной на момент компиляции, то логично что все это будет выкинуто компилятором. Но тогда и самого выражения при выполнении не будет, и порядок уже определять негде 
Последний раз редактировалось 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 в вопросах и ответах
Работаю от противного: 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 в вопросах и ответах
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Лишь бы срач развести (:
Какая на фиг разница в каком порядке происходят вычисления если от изменения этого порядка результат не меняется?
Какая на фиг разница в каком порядке происходят вычисления если от изменения этого порядка результат не меняется?
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: CodeVision AVR в вопросах и ответах
Одно из предположений: скорость вычисления. Самое вероятное в начало, самое невероятное в глубинку )
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
в конкретно взятом случае (что ТС описал) разницы, может, и нет, но говоря абстрактно (как я люблю - обобщая) она может быть: если в одном из выражений есть функция, меняющая глобальные переменные, например. глобальниыми переменными частенько грешат многие программы, и от того, КОГДА они изменены, может зависеть очень многое.BCluster писал(а):Лишь бы срач развести (:
Какая на фиг разница в каком порядке происходят вычисления если от изменения этого порядка результат не меняется?
битва с дураками проиграна, победители торжествуют. слава победителям!


