реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Вопрос(ы) по коду
esaulenka
сообщение Jun 15 2018, 12:42
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 1 029
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(k155la3 @ Jun 15 2018, 13:57) *
IMHO: Использование постфиксных, и тем более - префиксных ++ в составе выражения ухудшает читабельность кода.

Что в данном конкретном примере нечитабельно?
Просто и наглядно: если значение в первом массиве меньше, чем соответствующее значение во втором, увеличиваем это значение.
Как это можно понять по-другому?!

А тема занятная получилась. Выяснилось, что приоритет операций в стандарте C99 явно не описан (наверное, его можно восстановить из форм Бэкуса-Наура, но уж больно лень) и он отличается (!) от приоритетов C++.
Хотя, конечно, стандарты C++ писали неглупые люди и про совместимость они подумали. Лично я ни разу не наступил на грабли, пользуясь им в этой части при написании сишного кода.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jun 15 2018, 14:11
Сообщение #32


Профессионал
*****

Группа: Свой
Сообщений: 1 115
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(esaulenka @ Jun 15 2018, 15:42) *
Что в данном конкретном примере нечитабельно?
В данном и конкретном все понятно. (Если речь о том, что в первом посте)
Я в смысле применения к выражениям,
Цитата
a = b++ * 2 + b;

на что IAR выдает
Цитата
Warning[Pa081]: undefined behavior: the order of read and modification of variable "b" (declared 1at line 72) (or a value reached by some form of indirection through it) is undefined in this statement main.c 79
Оттранслировалось ли ЭТО в код не проверял.
Может кто более удачный пример "эффективного кода" приведет, не выдающего warning, error, но нечитабельного.



Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 15 2018, 14:35
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 201
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(k155la3 @ Jun 15 2018, 17:11) *
Может кто более удачный пример "эффективного кода" приведет, не выдающего warning, error, но нечитабельного.

За этим лучше сразу сюда: https://www.govnokod.ru biggrin.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jun 15 2018, 20:17
Сообщение #34


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(k155la3 @ Jun 15 2018, 17:11) *
В данном и конкретном все понятно. (Если речь о том, что в первом посте)

Может кто более удачный пример "эффективного кода" приведет, не выдающего warning, error, но нечитабельного.


Неоднозначность результата компилирования и читабельность кода - суть вещи разные.
Приведенный Вами пример (a = b++ * 2 + b;) очень даже читабельный, хотя и неоднозначный.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 15 2018, 20:21
Сообщение #35


Профессионал
*****

Группа: Свой
Сообщений: 1 201
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(aiwa @ Jun 15 2018, 23:17) *
пример (a = b++ * 2 + b;) очень даже читабельный,

Неясно, что подразумевается под термином "читабельный": умение читать код или умение понимать прочитанное?
Второе подразумевает явное знание работы компилятора и его действий.
Если же поведение компилятора в том или ином случае сложно предсказать, то как ни старайся именовать курицу павлином , все равно курицей она так и останется sm.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jun 15 2018, 21:44
Сообщение #36


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(Forger @ Jun 15 2018, 23:21) *
Неясно, что подразумевается под термином "читабельный": умение читать код или умение понимать прочитанное?
Второе подразумевает явное знание работы компилятора и его действий.

"Читабельность" - это совершенно субъективная инстанция, а работа компилятора - объективная.

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

Хотя пример лучше поменять на "а = b++ *2 + sin( b ); потому что старый можно оптимизировать в "а = b++ * 3;" воспользовавшись неоднозначностью порядка"

Сообщение отредактировал aiwa - Jun 15 2018, 21:45
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 15 2018, 21:55
Сообщение #37


Профессионал
*****

Группа: Свой
Сообщений: 1 201
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(aiwa @ Jun 16 2018, 00:44) *
...да, нечитабельный
Вот и я том же!
Применение винегрета (из разношерстных операторов при неоправданной экономии скобок () в пределах одного оператора ";") - любой код сделает нечитабельным, нечитаемым и т. п.
Озвучивать название такому "коду" тут запрещено правилами форума, но, я уверен, что все понимают о чем речь wink.gif

Потому возникает риторический вопрос: есть ли вообще смысл анализировать подобный "код", когда сходу сразу понятно, что нифига не понятно? ...

А всего-то достаточно добавить несколько пар скобок или операторов ";" с соотв. переносом строки, чтобы напрочь закрыть любую "необъективность" даже самого "упоротого" кода.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th September 2018 - 04:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01054 секунд с 7
ELECTRONIX ©2004-2016