Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 27.05.2018, 10:36   #1
Asmodey
Junior Member
 
Регистрация: 21.11.2009
Сообщений: 29
Вес репутации: 138/33
Asmodey will become famous soon enoughAsmodey will become famous soon enough
По умолчанию Комплиятор XC8, два сравнения в условии if

Подскажите, пожалуйста, XC8 поймет что от него требуется?
Код:
if(a<b && b<c){
}
Два сравнения для трех чисел в условии if. Хотелось бы немного сократить число if_ов в коде для лучшей читаемости.
Asmodey вне форума   Ответить с цитированием
Старый 27.05.2018, 11:24   #2
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 47
Сообщений: 400
Вес репутации: 645/40
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

if((a<b) && (b<c)){
__________________
я - кузнец. я не могу ни куя.
pasha_zv вне форума   Ответить с цитированием
Старый 27.05.2018, 12:41   #3
Asmodey
Junior Member
 
Регистрация: 21.11.2009
Сообщений: 29
Вес репутации: 138/33
Asmodey will become famous soon enoughAsmodey will become famous soon enough
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

pasha_zv, благодарю. Работает
Asmodey вне форума   Ответить с цитированием
Старый 28.05.2018, 20:09   #4
alexem
Senior Member
 
Аватар для alexem
 
Регистрация: 08.03.2008
Адрес: Самара
Возраст: 45
Сообщений: 494
Вес репутации: 392/45
alexem is just really nicealexem is just really nicealexem is just really nicealexem is just really nice
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от Asmodey Посмотреть сообщение
pasha_zv, благодарю. Работает
а без доп скобок работает?
alexem вне форума   Ответить с цитированием
Старый 29.05.2018, 09:10   #5
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 47
Сообщений: 400
Вес репутации: 645/40
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

а без доп скобок - выражение вычисляется последовательно.
и тут все зависит от типа операндов
А меньше Б -> логический
логический AND Б -> по идее - логический (не факт) и если Б четный, то результат - ноль
результат меньше С. если логический - то почти всегда - ноль.

как-то так.

ЗЫ. вот за что недолюбливаю Си и Пролог - типы данных приводятся друг к другу - НЕЯВНО.
тот же дельфи(паскаль) хрен даст такое скомпилировать.
__________________
я - кузнец. я не могу ни куя.
pasha_zv вне форума   Ответить с цитированием
Старый 30.05.2018, 20:58   #6
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 47
Сообщений: 148
Вес репутации: 1161/26
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от alexem Посмотреть сообщение
а без доп скобок работает?
работает. Порядок вычисления определяется приоритетом операций (https://ru.wikipedia.org/wiki/%D0%9E...%D0%B8_C%2B%2B)
У операторов сравнения приоритет выше (8) чем у логического И (11) - сначала исчислятся ОБА сравнения затем над их результатами применяется операция И, затем if. Скобки были актуальны разве что в первые десятилетия развития языка и компиляторов - сейчас их привычно расставляют просоленные с тех пор ветераны, ну и те, кому легче отбить порядок выполнения скобками, чем держать в голове таблицу приоритетов и правила ассоциативности. Мол, sicher ist sicher. ;-)
siarzhuk вне форума   Ответить с цитированием
Старый 31.05.2018, 07:26   #7
Vovka
Senior Member
 
Аватар для Vovka
 
Регистрация: 27.12.2007
Адрес: недалеко от г.Белгорода
Возраст: 50
Сообщений: 1,876
Вес репутации: 2862/85
Vovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond repute
Отправить сообщение для Vovka с помощью ICQ
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

А у меня как-то нет 100% доверия к компиляторам для PIC - вот и ставлю скобки... и не забываю в конце странички делать пустую строку
Зато когда пишу на Visual C++ лишние скобки не ставлю
__________________
Настройся на хороший день и он таким будет!
Vovka вне форума   Ответить с цитированием
Старый 31.05.2018, 07:42   #8
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,391
Вес репутации: 4688/107
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от Vovka Посмотреть сообщение
А у меня как-то нет 100% доверия к компиляторам для PIC - вот и ставлю скобки... и не забываю в конце странички делать пустую строку
Зато когда пишу на Visual C++ лишние скобки не ставлю
Надо поступать одинаково, А то если приспичит из под микрочипа какую нибудь математику откатать на компе, можно будет удивиться сколько работы вместо того чтобы просто вставить файлик из одного проекта в другой.
ampersant на форуме   Ответить с цитированием
Старый 31.05.2018, 08:01   #9
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,696
Вес репутации: 3274/70
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

siarzhuk
тут есть интересный момент.
Код:
if(a<b && b<c){

}
в целом равно
Код:
if((a<b) && (b<c)){

}
пока у Вас a, b, c есть переменные.

но, бывают случаи, ситуация хуже - a или b или с могут быть выведенными за пределы модуля макросами.

и тут получается, что для макро предпочтительней вариант
Код:
if((A<B) && (B<C)){

}
так как он дополнительно определит поведение, если автор другого пишет хуже, чем надо.

как пишу я? пишу так, чтобы видно было лучше. как видно лучше? - ну это я определяю на глаз. если adc0->adc->buff[0] > трутрутру->трутуту.трурурру ставлю скобки.
besogon вне форума   Ответить с цитированием
Старый 31.05.2018, 09:22   #10
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 47
Сообщений: 148
Вес репутации: 1161/26
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от besogon Посмотреть сообщение
siarzhuk
но, бывают случаи, ситуация хуже - a или b или с могут быть выведенными за пределы модуля макросами.
Это да. Потому второе правило написания макросов - огораживать их содержимое и параметры скобками ещё на этапе написания самого этого макроса. Сущность, претендующая на роль переменной/функции, должна и вести себя как переменная/функция. Уж в элементарнейших вопросах приоритетов так точно. Кстати, если придраться к исходному сравнению в аспекте макросов, - то переменно-подобная нотация в конкретном случае скроет двойное исполнение кода стоящего за B.
-"Верить нельзя никому, а уж макросам так тем более".
siarzhuk вне форума   Ответить с цитированием
Старый 03.06.2018, 11:54   #11
Asmodey
Junior Member
 
Регистрация: 21.11.2009
Сообщений: 29
Вес репутации: 138/33
Asmodey will become famous soon enoughAsmodey will become famous soon enough
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Чтобы не плодить темы тут же спрошу - какую глубину вложений if допускает компилятор XC8? Подозреваю, что допустимое число вложений не так уж велико.
Asmodey вне форума   Ответить с цитированием
Старый 03.06.2018, 23:13   #12
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 47
Сообщений: 148
Вес репутации: 1161/26
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от Asmodey Посмотреть сообщение
какую глубину вложений if допускает компилятор XC8? Подозреваю, что допустимое число вложений не так уж велико.
Технически if - это [утрированно] cmp и jmp, и в чём может быть проблема компилятору наплодить их столько, сколько заказчику будет угодно? Ну разве что на платформе где jmp "не простреливает" всю карту исполняемой памяти - количество операндов [между точками] при переходе будет иметь значение.

Скорее у программиста возникнет проблема с пониманием написанного в таком стиле кода. Рекомендуемая длина строки 80 символов, типовой отступ - табуляция|4 символа. Так как большинство кода живёт в функциях - первый же if это 72 символа на всё. Второе вложение - 68. А поскольку "тело" каждого if должно что-то делать то, находясь в середине пятистраничной функции, отличить отступ верхнего уровня (4) от второго уровня (8) ещё можно, а 4-го от 3-го (16 vs 12) и так далее - без "пробежки" к заголовку if-а порой сложновато. Особенно если функция в страницу экрана уже не помещается, а тем паче блоки кода под if-ами такого размера. Иными словами сомнения в собственной непогрешимости начинаются где-то уже с появлением в коде 4-ой вложенности блоков и демон рефакторинга просыпается предвкушая сытную кормёжку.
siarzhuk вне форума   Ответить с цитированием
Старый 04.06.2018, 07:15   #13
Vovka
Senior Member
 
Аватар для Vovka
 
Регистрация: 27.12.2007
Адрес: недалеко от г.Белгорода
Возраст: 50
Сообщений: 1,876
Вес репутации: 2862/85
Vovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond repute
Отправить сообщение для Vovka с помощью ICQ
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Да ладно, есть же мониторы с бОльшей диагональю!
__________________
Настройся на хороший день и он таким будет!
Vovka вне форума   Ответить с цитированием
Старый 04.06.2018, 08:13   #14
HHIMERA
Senior Member
 
Регистрация: 10.06.2008
Возраст: 56
Сообщений: 2,821
Вес репутации: 3872/103
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
где-то уже с появлением в коде 4-ой вложенности блоков и демон рефакторинга просыпается предвкушая сытную кормёжку.
Лучше вызвать духов агрессивной оптимизации и code reordering...
__________________
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA вне форума   Ответить с цитированием
Старый 04.06.2018, 08:53   #15
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,696
Вес репутации: 3274/70
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

siarzhuk
типовой отступ - табуляция|4 символа - табуляция всегда должна быть шириной 8. остальное это что угодно, но не табуляция.
Vovka
есть разные стили написания кода, однако для всех их характерно, что для того, чтобы код был более 80 символов шириной должны быть веские причины. а более 120 он быть не должен.
HHIMERA
уровень вложенности и оптимизации связаны слабо.
besogon вне форума   Ответить с цитированием
Старый 04.06.2018, 09:02   #16
Asmodey
Junior Member
 
Регистрация: 21.11.2009
Сообщений: 29
Вес репутации: 138/33
Asmodey will become famous soon enoughAsmodey will become famous soon enough
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
и в чём может быть проблема компилятору наплодить их столько, сколько заказчику будет угодно?
На этом форуме или на Казусе кто-то из гуру писал, что количество вложений не должно превышать 8_ми. Там шла речь про компилятор хайтек. Правда это или нет я не знаю, поэтому решил уточнить.
Asmodey вне форума   Ответить с цитированием
Старый 04.06.2018, 09:10   #17
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,722
Вес репутации: 5285/161
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от Asmodey Посмотреть сообщение
На этом форуме или на Казусе кто-то из гуру писал, что количество вложений не должно превышать 8_ми. Там шла речь про компилятор хайтек. Правда это или нет я не знаю, поэтому решил уточнить.
то был баг конкретного компилятора на ограничение числа вложенных if в прерывании. забудьте...
как тут верно подметили, ограничение обычно касается визуального восприятия блоков if и именно по вертикали (не влезает в зкран).
ещё если потерять где-то скобку - беда...
Greg вне форума   Ответить с цитированием
Старый 04.06.2018, 09:38   #18
Asmodey
Junior Member
 
Регистрация: 21.11.2009
Сообщений: 29
Вес репутации: 138/33
Asmodey will become famous soon enoughAsmodey will become famous soon enough
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от Greg Посмотреть сообщение
забудьте
Все понял, забыл
Asmodey вне форума   Ответить с цитированием
Старый 04.06.2018, 10:38   #19
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,391
Вес репутации: 4688/107
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: Комплиятор XC8, два сравнения в условии if

Цитата:
Сообщение от Greg Посмотреть сообщение
то был баг конкретного компилятора на ограничение числа вложенных if в прерывании. забудьте...
как тут верно подметили, ограничение обычно касается визуального восприятия блоков if и именно по вертикали (не влезает в зкран).
ещё если потерять где-то скобку - беда...
}//if(condition) бла бла - копия самого условия, чтобы не терять нить повествования
ampersant на форуме   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 15:18.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot