Ну как же - ускоряется работа компилятора (на несколько μs)Аlex писал(а): Ну а какие плюсы, кроме минусов, от отсутствия "лишних" скобок - мне неведомо
Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Ну разве что 
Re: Вопросы по С/С++ (СИ)
[uquote="smalcom",url="/forum/viewtopic.php?p=3219212#p3219212"]Автор или другой человек может читать исходный код и забыть о приоритетах, при беглом осмотре это тоже будет притормаживать внимание;[/uquote]
В проектировании пользовательских интерфейсов есть понятие "визуального мусора" - т.е. элементов не несуших никакой функциональной нагрузки, но отбирающих ресурсы зрительной системы пользователя. Для "бреющихся бритвой Оккама"© сиречь перфекционистов "ненужные" скобки и есть такой мусор.
[/IMHO]
Но упёртость как little endians так и big endians в своей правоте непробиваема, посему любой более-менее серьёзный проект начинается с формулировки codestyle guidelines - где и прописывается где какие скобки и как ставятся. Чтобы облегчить "беглый просмотр" для всех участников, ага.
[uquote="smalcom",url="/forum/viewtopic.php?p=3219212#p3219212"]Как говорили: для C/C++ определён порядок слева-направо[/uquote]
Если вы про ассоциативность операторов - то это не всегда так. Далеко не всегда - 44% С и 46% С++ операторов право-ассоциативны.
В проектировании пользовательских интерфейсов есть понятие "визуального мусора" - т.е. элементов не несуших никакой функциональной нагрузки, но отбирающих ресурсы зрительной системы пользователя. Для "бреющихся бритвой Оккама"© сиречь перфекционистов "ненужные" скобки и есть такой мусор.
Но упёртость как little endians так и big endians в своей правоте непробиваема, посему любой более-менее серьёзный проект начинается с формулировки codestyle guidelines - где и прописывается где какие скобки и как ставятся. Чтобы облегчить "беглый просмотр" для всех участников, ага.
[uquote="smalcom",url="/forum/viewtopic.php?p=3219212#p3219212"]Как говорили: для C/C++ определён порядок слева-направо[/uquote]
Если вы про ассоциативность операторов - то это не всегда так. Далеко не всегда - 44% С и 46% С++ операторов право-ассоциативны.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
Re: Вопросы по С/С++ (СИ)
Спасибо, что открыли мне глаза. Вот теперь я счастлив.
Re: Вопросы по С/С++ (СИ)
Ну хорошо, наверняка здесь есть хорошо владеющие СИ, вот прокомментируйте сей код, насколько он кошмарный/некошмарный, само устройство на нем работает как я и задумывал, но может как-то можно код сократить/улучшить без потери функциональности? Если кому понадобится могу скинуть весь проект+схема в протеусе. Кто что скажет?
Добавлено after 3 minutes 51 second:
Обновил сообщение.
Добавлено after 3 minutes 51 second:
Обновил сообщение.
- Вложения
-
- 1235.txt
- (74.5 КБ) 288 скачиваний
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Глянул только на начало : Дальше даже смотреть не стал. От комментарий воздержусь ... 
Спойлер
Код: Выделить всё
typedef unsigned char byte;
unsigned char buffer[32];
bit blink,startindk,startindt,pirkor,indik,start_back,start_rele,start_mic,start_pirkor,
start_pirtua,start_gerkon_1,start_gerkon_2,ind_mic,start_ohtik,start_nochnik,start_tt,spark,
t_end,tic,start_timer,t_flag,lustra_on,rele_1,rele_2,rele_3,rele_4,ee,ff,
start_test,t_flag_2,t_end_2,sw_temp;
unsigned char sec,min,hour,day,week,month,year;
unsigned char w,a,b,cc,dreb_0,dreb_1,opros,delayt,ik,alb,alarm_b,alarm_a,bl,ab,ttt,
ind,tpirr,tpirrr,pirkorr,pir_kor,pir_tua,gerkon_1,gerkon_1_ncno,gerkon_2,gerkon_2_ncno,
mic,en_tic_kor,en_tic_tua,counter,test_del,sp,ind_mic_t,start_timer_2,start_tt_2,timer_2,tvvv_2,
en_al,en_al_2,cou,test_count,secur,mode,swit,nag,en_nochnik,time_ohr,aaaa,bbbb,cccc,dddd,eeee,
vb,vvv,shkaf,en_lustra,alarm_r,r,tr,port_1,port_2,port_3,port_4,
tvvv,en_tic_hour,enprom,buzzer,rem_mem,opros_akk,func_count,f_1,start_func,
tpirk,tpirt,delay_kor,timrem,phone,kor_from,kor_to,al,tal,al_0,day_al,day_1_al,
day_2_al,day_3_al,day_4_al,day_5_al,day_6_al,day_7_al,hour_al,min_al,hour_al_1,
hour_al_2,hour_al_3,hour_al_4,hour_al_5,hour_al_6,hour_al_7,min_al_1,min_al_2,
min_al_3,min_al_4,min_al_5,min_al_6,min_al_7,hour_nag_start,min_nag_start,hour_nag_fin,min_nag_fin,
day_nag_start,month_nag_start,year_nag_start,day_nag_fin,month_nag_fin,year_nag_fin,
hour_rem_1,min_rem_1,day_rem_1,month_rem_1,year_rem_1,al_rem_1;
signed char back,countdown,cor,correct,timer_count,tt,tt_2,timer_count_2;
unsigned int temp,temper,mint,maxt,bc,dreb_2,dreb_3,rele,count_mic,count_pirkor,
count_pirtua,count_gerkon_1,ohtik,count_gerkon_2,vc,volt,volter,tnochnik,ttimer,t_count,
end_tt,ttimer_2,t_count_2,end_tt_2,copy_temp,tshkaf,qq,yy,rr,mem,eeppp,func;
eeprom unsigned char eep_day,eep_month,eep_year,eep_week;
eeprom unsigned char eep_pir_kor,eep_pir_tua,eep_gerkon_1,eep_gerkon_1_ncno,eep_mic,eep_gerkon_2,
eep_gerkon_2_ncno,eep_tpirk,eep_tpirt,eep_delay_kor,eep_timrem,eep_en_tic_kor,eep_en_tic_tua,
eep_kor_from,eep_en_nochnik,eep_en_lustra,eep_time_ohr,eep_shkaf,
eep_kor_to,eep_buzzer,eep_phone,eep_enprom,eep_nag,eep_en_tic_hour,eep_al,eep_day_1_al,eep_day_2_al,
eep_day_3_al,eep_day_4_al,eep_day_5_al,eep_day_6_al,eep_day_7_al,eep_min_al_1,eep_hour_al_1,
eep_min_al_2,eep_hour_al_2,eep_min_al_3,eep_hour_al_3,eep_min_al_4,eep_hour_al_4,eep_min_al_5,
eep_hour_al_5,eep_min_al_6,eep_hour_al_6,eep_min_al_7,eep_hour_al_7,eep_min_nag_start,
eep_hour_nag_start,eep_min_nag_fin,eep_hour_nag_fin,eep_day_nag_start,eep_month_nag_start,
eep_year_nag_start,eep_day_nag_fin,eep_month_nag_fin,eep_year_nag_fin,eep_hour_rem_1,eep_min_rem_1,
eep_day_rem_1,eep_month_rem_1,eep_year_rem_1,eep_al_rem_1;
eeprom signed char eep_cor;
eeprom unsigned int eep_count_mic,eep_count_pirkor,eep_count_pirtua,eep_count_gerkon_1,
eep_count_gerkon_2;
Re: Вопросы по С/С++ (СИ)
Так вот мне и нужны как раз комментарии! Просто нужно мнение.
Что там не так ? Слишком запутанно, как мне кажется?
Что там не так ? Слишком запутанно, как мне кажется?
Последний раз редактировалось ra9ust Пн окт 30, 2017 13:59:46, всего редактировалось 1 раз.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
А вот это : Вообще, шедевр 
Добавлено after 1 minute 17 seconds:
[uquote="ra9ust",url="/forum/viewtopic.php?p=3219971#p3219971"]Так вот мне и нужны как раз комментарии! Просто нужно мнение.[/uquote]
У Вас свалено всё в кучу и превратилось в кашу. В Вашем коде ориентироваться невозможно.
Вам знакомо слово "модульность" ?
Спойлер
Код: Выделить всё
if(
day==eep_day&&week==eep_week&&month==eep_month&&year==eep_year&&
min_al_1==eep_min_al_1&&hour_al_1==eep_hour_al_1&&min_al_2==eep_min_al_2&&hour_al_2==eep_hour_al_2&&
min_al_3==eep_min_al_3&&hour_al_3==eep_hour_al_3&&min_al_4==eep_min_al_4&&hour_al_4==eep_hour_al_4&&
min_al_5==eep_min_al_5&&hour_al_5==eep_hour_al_5&&min_al_6==eep_min_al_6&&hour_al_6==eep_hour_al_6&&
min_al_7==eep_min_al_7&&hour_al_7==eep_hour_al_7&&al==eep_al&&day_1_al==eep_day_1_al&&
day_2_al==eep_day_2_al&&day_3_al==eep_day_3_al&&day_4_al==eep_day_4_al&&day_5_al==eep_day_5_al&&
day_6_al==eep_day_6_al&&day_7_al==eep_day_7_al&&cor==eep_cor&&gerkon_2==eep_gerkon_2&&
pir_tua==eep_pir_tua&&mic==eep_mic&&gerkon_1==eep_gerkon_1&&gerkon_1_ncno==eep_gerkon_1_ncno&&
gerkon_2_ncno==eep_gerkon_2_ncno&&pir_kor==eep_pir_kor&&tpirk==eep_tpirk&&tpirt==eep_tpirt&&
delay_kor==eep_delay_kor&&timrem==eep_timrem&&buzzer==eep_buzzer&&phone==eep_phone&&
kor_from==eep_kor_from&&kor_to==eep_kor_to&&en_tic_hour==eep_en_tic_hour&&
en_tic_kor==eep_en_tic_kor&&en_tic_tua==eep_en_tic_tua&&en_nochnik==eep_en_nochnik&&
en_lustra==eep_en_lustra&&time_ohr==eep_time_ohr&&shkaf==eep_shkaf&&enprom==eep_enprom&&
nag==eep_nag&&hour_nag_start==eep_hour_nag_start&&min_nag_start==eep_min_nag_start&&
hour_nag_fin==eep_hour_nag_fin&&min_nag_fin==eep_min_nag_fin&&
day_nag_start==eep_day_nag_start&&month_nag_start==eep_month_nag_start&&
year_nag_start==eep_year_nag_start&&day_nag_fin==eep_day_nag_fin&&
month_nag_fin==eep_month_nag_fin&&year_nag_fin==eep_year_nag_fin&&hour_rem_1==eep_hour_rem_1&&
min_rem_1==eep_min_rem_1&&day_rem_1==eep_day_rem_1&&month_rem_1==eep_month_rem_1&&
year_rem_1==eep_year_rem_1&&al_rem_1==eep_al_rem_1)
{
Добавлено after 1 minute 17 seconds:
[uquote="ra9ust",url="/forum/viewtopic.php?p=3219971#p3219971"]Так вот мне и нужны как раз комментарии! Просто нужно мнение.[/uquote]
У Вас свалено всё в кучу и превратилось в кашу. В Вашем коде ориентироваться невозможно.
Вам знакомо слово "модульность" ?
Re: Вопросы по С/С++ (СИ)
Понимаю. Тогда как сделать сравнение всех тех переменных находящихся в ОЗУ с их значениями в EEPROM ?
Добавлено after 2 minutes 10 seconds:
Согласен, в куче. Но я свободно ориентируюсь , возможно потому что сам составлял. По той же причине мне непонятен любой чужой код.Ну так как насчет сравнения переменных в епром?
Добавлено after 2 minutes 10 seconds:
Согласен, в куче. Но я свободно ориентируюсь , возможно потому что сам составлял. По той же причине мне непонятен любой чужой код.Ну так как насчет сравнения переменных в епром?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
[uquote="ra9ust",url="/forum/viewtopic.php?p=3219974#p3219974"]как сделать сравнение всех тех переменных находящихся в ОЗУ с их значениями в EEPROM ?[/uquote] Структуры + побайтовое сравнение через указатель.
Re: Вопросы по С/С++ (СИ)
А покажите это на примере,упрощенно?
Re: Вопросы по С/С++ (СИ)
код ну совсем ужасен, честно. Отмазка "я в нем разбираюсь" не принимается.
1) форматирование. Отступ - три или четыре пробела, а не один.
2) магические числа везде. Не должно такого быть, менять на константы или дефайны с осмысленными именами.
3) из названия функции должно быть понятно, что она делать. Вот что за temperature()?
4) откройте для себя switch
5) раз пишете сообщения и идентификаторы по английски и знаете его плохо, пользуйтесь переводчиком. Хотя бы для сообщений.
6) огромные цепочки условий в if-ах сокращаем и упрощаем. Думаем, как. В самом крайнем случае, если с ними вообще сделать ничего нельзя (что обычно не так) - выделяем скобками логически связанные блоки
7) не стесняемся использовать массивы и структуры вместо кучи переменных с индексами. Это к мешанине hour_al_1 и иже с ним.
избавляйтесь от кучи одинаковых функций, все отличие которых - разные переменные. Сему способствует пункт 7.
1) форматирование. Отступ - три или четыре пробела, а не один.
2) магические числа везде. Не должно такого быть, менять на константы или дефайны с осмысленными именами.
3) из названия функции должно быть понятно, что она делать. Вот что за temperature()?
4) откройте для себя switch
5) раз пишете сообщения и идентификаторы по английски и знаете его плохо, пользуйтесь переводчиком. Хотя бы для сообщений.
6) огромные цепочки условий в if-ах сокращаем и упрощаем. Думаем, как. В самом крайнем случае, если с ними вообще сделать ничего нельзя (что обычно не так) - выделяем скобками логически связанные блоки
7) не стесняемся использовать массивы и структуры вместо кучи переменных с индексами. Это к мешанине hour_al_1 и иже с ним.
Re: Вопросы по С/С++ (СИ)
Так, по магическим числам поясните,непонятно.
Чем свитч лучше чем иф?
Не понял про идентификаторы.
Но повторюсь, мне в нем всё понятно, но насчет уменьшения размера кода полностью согласен.
**избавляйтесь от кучи одинаковых функций, все отличие которых - разные переменные. Сему способствует пункт 7.** и с этим согласен, но подскажите как? На простом примере.
Чем свитч лучше чем иф?
Не понял про идентификаторы.
Но повторюсь, мне в нем всё понятно, но насчет уменьшения размера кода полностью согласен.
**избавляйтесь от кучи одинаковых функций, все отличие которых - разные переменные. Сему способствует пункт 7.** и с этим согласен, но подскажите как? На простом примере.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
[uquote="ra9ust",url="/forum/viewtopic.php?p=3219982#p3219982"]А покажите это на примере,упрощенно?[/uquote] Пример чего интересует ? Организацию структуры, или работу с указателем ?
Re: Вопросы по С/С++ (СИ)
Ну например куча сравнений переменных с их значениями в еепром, как записать это компактней? Ну если конечно это приведет к уменьшению размера кода, а иначе нет смысла заморачиваться.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Кучу переменных - никак. Объединяйте все переменные, логически связанные друг с другом, в структуры.ra9ust писал(а):куча сравнений переменных с их значениями в еепром, как записать это компактней?
А две одинаковые структуры сравниваются элементарно - в цикле, через указатель, пробегаемся по всем байтикам и сравниваем их.
PS: Надеюсь, что такое структуры и указатели не нужно рассказывать ? Если что, всё гуглится без проблем.
Re: Вопросы по С/С++ (СИ)
[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]Так, по магическим числам поясните,непонятно.[/uquote]
что такое 14? 72? 60? 93? 90? 0b0111111110010000? 0x42? Это и есть magic numbers - какие-то числа, что-то там означающие, но неизвестно что. Они все должны быть константами, дефайнами или энумами с осмысленными именами.
[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]Чем свитч лучше чем иф?[/uquote]
наглядностью в случаях выбора из множества возможных значений.
[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]Не понял про идентификаторы.[/uquote]
месиво из нормальный английских count, month, year, buzzer и транслита типа nochnik, lustra, opros сильно режет глаза.
[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]Но повторюсь, мне в нем всё понятно[/uquote]
тоже повторюсь - эта отмазка не принимается)
[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]**избавляйтесь от кучи одинаковых функций, все отличие которых - разные переменные. Сему способствует пункт 7.** и с этим согласен, но подскажите как? На простом примере.[/uquote]
вместо трешища
пишем чото типа
и работаем дальше с массивом.
Код: Выделить всё
...
if(cc>=254)cc=14;
...
if(w==72)w=60;
if(w==93)w=90;
...
if(eeppp&0b0111111110010000)
...
lcd_putchar(0x42)
...[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]Чем свитч лучше чем иф?[/uquote]
наглядностью в случаях выбора из множества возможных значений.
[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]Не понял про идентификаторы.[/uquote]
месиво из нормальный английских count, month, year, buzzer и транслита типа nochnik, lustra, opros сильно режет глаза.
[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]Но повторюсь, мне в нем всё понятно[/uquote]
тоже повторюсь - эта отмазка не принимается)
[uquote="ra9ust",url="/forum/viewtopic.php?p=3220033#p3220033"]**избавляйтесь от кучи одинаковых функций, все отличие которых - разные переменные. Сему способствует пункт 7.** и с этим согласен, но подскажите как? На простом примере.[/uquote]
вместо трешища
Код: Выделить всё
day_1_al, day_2_al,day_3_al,day_4_al,day_5_al,day_6_al,day_7_al,hour_al,min_al,hour_al_1,
hour_al_2,hour_al_3,hour_al_4,hour_al_5,hour_al_6,hour_al_7,min_al_1,min_al_2,
min_al_3,min_al_4,min_al_5,min_al_6,min_al_7Код: Выделить всё
typedef struct {
unsigned char day,
unsigned char hour,
unsigned char minute
} alarm_time_type;
alarm_time_type alarms[7];Re: Вопросы по С/С++ (СИ)
А вот вместо трешища короткая запись, это спасибо, примем к сведению. Ну а транслит и всё такое это просто на скорую руку, а потом так и осталось. А код правда мне понятен, ну видимо у кажного свое восприятие/написание.
Re: Вопросы по С/С++ (СИ)
[uquote="ra9ust",url="/forum/viewtopic.php?p=3219963#p3219963"]Ну хорошо, наверняка здесь есть хорошо владеющие СИ, вот прокомментируйте сей код, насколько он кошмарный/некошмарный, само устройство на нем работает как я и задумывал, но может как-то можно код сократить/улучшить без потери функциональности? Если кому понадобится могу скинуть весь проект+схема в протеусе. Кто что скажет?[/uquote]
Мне сегодня сказали, что в четверг будет конец света - что-то там связанное с Юпитером и Венерой. Я не очень поверил поначалу, но теперь всё понял: не качайте архив!!!
Мне сегодня сказали, что в четверг будет конец света - что-то там связанное с Юпитером и Венерой. Я не очень поверил поначалу, но теперь всё понял: не качайте архив!!!
Re: Вопросы по С/С++ (СИ)
Налицо ( как минимум
) куча ненужных проверок. Например, для чего постоянно проверять изменение минут, часов и др., если это требуется только при очередном изменении секунд? т.е. вместо
Я-бы написал:
В целом, я-бы всё совсем по-другому написал.
Код, это просто п...ц, согласен с вышенаприведенными резюме.
Мне вот этого ( в одном месте функции, мля!!! )
тоже хватило, чтобы остающуюся часть "нетленки" уже не читать, тут уже явно с логикой проблемы. В програмиировании на Си подобная "штыковая атака" не прокатит, вы саму методологию игнорируете. Оно, возможно, даже будет работать, но я сочувствую человеку ( вы вполне можете оказаться этим человеком через полгода ), которому понадобится что-то исправить/дописать.
Код: Выделить всё
...
if(sec>=60){min++;sec=0;}
if(min>=60){hour++;min=0;tic=1;}
if(hour==23&&min==59&&sec==50){if(cor>0)sec+=cor;}
if(hour==23&&min==59&&sec==59&&cc>11){if(cor<0)sec-=(128-(cor&0b01111111));cc=0;}
if(hour>=24){day++;hour=0;week++;mint=0;maxt=0;eep_day=day;eep_month=month;eep_week=week;eep_year=year;}
...
Код: Выделить всё
if(sec>=60)
{
min++;
sec=0;
if(min>=60)
{
hour++;
min=0;
tic=1;
if(hour >= 24)
{
day ++;
hour = 0;
week ++;
mint = 0;
maxt = 0;
eep_day = day;
eep_month = month;
eep_week = week;
eep_year = year;
}
}
}
if( hour == 23 && min == 59 )
{
if( sec == 50 )
if( cor > 0 )
sec+=cor;
if( sec == 59 && cc > 11 )
{
if(cor<0)
sec-=(128-(cor&0b01111111));
cc=0;
}
}Код: Выделить всё
...
tal++;
tr++;
a++;
b++;
tpirr++;
tpirrr++;
...



