esaulenka 5 15 июня, 2018 Опубликовано 15 июня, 2018 · Жалоба IMHO: Использование постфиксных, и тем более - префиксных ++ в составе выражения ухудшает читабельность кода. Что в данном конкретном примере нечитабельно? Просто и наглядно: если значение в первом массиве меньше, чем соответствующее значение во втором, увеличиваем это значение. Как это можно понять по-другому?! А тема занятная получилась. Выяснилось, что приоритет операций в стандарте C99 явно не описан (наверное, его можно восстановить из форм Бэкуса-Наура, но уж больно лень) и он отличается (!) от приоритетов C++. Хотя, конечно, стандарты C++ писали неглупые люди и про совместимость они подумали. Лично я ни разу не наступил на грабли, пользуясь им в этой части при написании сишного кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 15 июня, 2018 Опубликовано 15 июня, 2018 · Жалоба Что в данном конкретном примере нечитабельно? В данном и конкретном все понятно. (Если речь о том, что в первом посте) Я в смысле применения к выражениям, 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, но нечитабельного. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 15 июня, 2018 Опубликовано 15 июня, 2018 · Жалоба Может кто более удачный пример "эффективного кода" приведет, не выдающего warning, error, но нечитабельного. За этим лучше сразу сюда: https://www.govnokod.ru :biggrin: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 15 июня, 2018 Опубликовано 15 июня, 2018 · Жалоба В данном и конкретном все понятно. (Если речь о том, что в первом посте) Может кто более удачный пример "эффективного кода" приведет, не выдающего warning, error, но нечитабельного. Неоднозначность результата компилирования и читабельность кода - суть вещи разные. Приведенный Вами пример (a = b++ * 2 + b;) очень даже читабельный, хотя и неоднозначный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 15 июня, 2018 Опубликовано 15 июня, 2018 · Жалоба пример (a = b++ * 2 + b;) очень даже читабельный, Неясно, что подразумевается под термином "читабельный": умение читать код или умение понимать прочитанное? Второе подразумевает явное знание работы компилятора и его действий. Если же поведение компилятора в том или ином случае сложно предсказать, то как ни старайся именовать курицу павлином , все равно курицей она так и останется :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 15 июня, 2018 Опубликовано 15 июня, 2018 (изменено) · Жалоба Неясно, что подразумевается под термином "читабельный": умение читать код или умение понимать прочитанное? Второе подразумевает явное знание работы компилятора и его действий. "Читабельность" - это совершенно субъективная инстанция, а работа компилятора - объективная. Но если подразумевать под "читабельностью" предсказание работы компилятора, то - да, нечитабельный: компилятор даже вправе генерить различный код для такого оператора в разных местах. Хотя пример лучше поменять на "а = b++ *2 + sin( b ); потому что старый можно оптимизировать в "а = b++ * 3;" воспользовавшись неоднозначностью порядка" Изменено 15 июня, 2018 пользователем aiwa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 15 июня, 2018 Опубликовано 15 июня, 2018 · Жалоба ...да, нечитабельныйВот и я том же! Применение винегрета (из разношерстных операторов при неоправданной экономии скобок () в пределах одного оператора ";") - любой код сделает нечитабельным, нечитаемым и т. п. Озвучивать название такому "коду" тут запрещено правилами форума, но, я уверен, что все понимают о чем речь ;) Потому возникает риторический вопрос: есть ли вообще смысл анализировать подобный "код", когда сходу сразу понятно, что нифига не понятно? ... А всего-то достаточно добавить несколько пар скобок или операторов ";" с соотв. переносом строки, чтобы напрочь закрыть любую "необъективность" даже самого "упоротого" кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться