Перейти к содержанию
    

IMHO: Использование постфиксных, и тем более - префиксных ++ в составе выражения ухудшает читабельность кода.

Что в данном конкретном примере нечитабельно?

Просто и наглядно: если значение в первом массиве меньше, чем соответствующее значение во втором, увеличиваем это значение.

Как это можно понять по-другому?!

 

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

Хотя, конечно, стандарты C++ писали неглупые люди и про совместимость они подумали. Лично я ни разу не наступил на грабли, пользуясь им в этой части при написании сишного кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что в данном конкретном примере нечитабельно?
В данном и конкретном все понятно. (Если речь о том, что в первом посте)

Я в смысле применения к выражениям,

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, но нечитабельного.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В данном и конкретном все понятно. (Если речь о том, что в первом посте)

 

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

 

Неоднозначность результата компилирования и читабельность кода - суть вещи разные.

Приведенный Вами пример (a = b++ * 2 + b;) очень даже читабельный, хотя и неоднозначный.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пример (a = b++ * 2 + b;) очень даже читабельный,

Неясно, что подразумевается под термином "читабельный": умение читать код или умение понимать прочитанное?

Второе подразумевает явное знание работы компилятора и его действий.

Если же поведение компилятора в том или ином случае сложно предсказать, то как ни старайся именовать курицу павлином , все равно курицей она так и останется :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неясно, что подразумевается под термином "читабельный": умение читать код или умение понимать прочитанное?

Второе подразумевает явное знание работы компилятора и его действий.

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

 

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

 

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

Изменено пользователем aiwa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...да, нечитабельный
Вот и я том же!

Применение винегрета (из разношерстных операторов при неоправданной экономии скобок () в пределах одного оператора ";") - любой код сделает нечитабельным, нечитаемым и т. п.

Озвучивать название такому "коду" тут запрещено правилами форума, но, я уверен, что все понимают о чем речь ;)

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...