![]() |
|
Модераторы: bsa |
![]()
|
|
| semibug |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Время от времени натыкаюсь в сети на рекомендацию использовать константы с левой стороны операции сравнения.
К примеру вместо
следует писать
Смысл в том, что в случае написания одного знака равенства в первом случае ошибка может остаться незамеченной, а во втором компилятор выдаст ошибку. Привык писать первым вариантом, как Вы считаете, знатоки, стоит ли отвыкать? |
||||
|
|||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: нет Всего: 44 |
||||
|
||||
| semibug |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
chaos, вы за вариант: "константу слева" ?
|
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: нет Всего: 23 |
semibug, я за константу слева, что с уст моих коллег звучит как "писать сравнения в стиле Йоды"
|
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Я раньше тоже писал как в первом варианте, потом пересилил себя и отвык. теперь пишу ТОЛЬКО как во втором, потому что возможные ошибки лучше убирать ( если это возможно, конечно ) на этапе компиляции, а не на этапе отладки или эксплуатации.
Вот ещё пример того, как уйти от ошибок на этапе компиляции:
лучше заменить на
чтобы если нужно заремить do_if_expr() do_anyway() не выполнялась по условию. Есть ещё рекомендация использовать шаблоны вместо макросов ( там есть проверка типов ) semibug, не возражаешь, если я задам вопрос в твоей теме ? Кто-нибудь знает ещё такие же trick'и для того, чтобы избегать ошибок на этапе компиляции ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
константа слева
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
константа справа
я никогда не замечал, чтобы в обсуждении алгоритмов люди говорили "и если 2 равно иксу, то...", а читабельность - немаловажное свойство кода а для поисков ошибок нужно смотреть на предупреждения компилятора, при желании можно его даже в ошибку переделать -------------------- qqq |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
константа слева
-------------------- ![]() |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
а что скажет компилятор?:
|
|||
|
||||
| semibug |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
boostcoder, MSVC даёт у меня С4706 (assignment within conditional expression), если включить Warning Level 4.
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
а если так?:
любопытно, на основании чего msvc принимает такое решение? согласен, в первом варианте это логично предположить. а что компилятор скажет во втором случае? |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
В моей ИДЕ ( MSVS + VisualAssistX ) есть snippet
и потом, в expr может быть какое-то действие, например
если включить Warning Level 4 у меня на Qt начинает матом ругаться, поэтому ограничиваюсь 3-м. Так всё-таки, по поводу ещё таких же ухищрений. Кто-нибудь знает такого рода "правила" ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
константа слева
|
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Смотря какая IDE. Например FDT подчеркивает это и помечает на полях. Так что не заметить невозможно. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не только msvc.. Предполагается что в _условиях_ правильна лишь инициализация, но не присваивание.. т.е. если этот код вызовет предупреждение: то этот вполне легален:
Это сообщение отредактировал(а) mes - 14.7.2010, 09:25 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Не обращаю внимания на эту мелочь, пишу так, как с языка слетает (что с чем сравнивать). ИМХО проблема надуманая, но странно, что идею еще никто не довел до идиотизма
и отказу от == в коде. Это сообщение отредактировал(а) djamshud - 14.7.2010, 09:25 -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
как с языка слетает, зависит от привычки. У всех ( с опытом ) кто написал _слева_, именно так и слетает с языка |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
константа справа.
Ошибался только в начале (когда после паскаля пересел на С), сейчас крайне редко (все случаи, что я помню, исправлял тут же). Думаю, потому что компилятор выдает предупреждение. Оно конечно раздражает, когда надо действительно использовать присваивание внутри условия (if (f = fopen(...))... ), но никто не мешает использовать еще одни скобки. |
|||
|
||||
| semibug |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
borisbn, такой ещё трик он же сюжет для холивара заметил - писать бесконечный цикл лучше
чем
Рекомендовано варнингом студии. Первое, что пришло в голову, в while можно по ошибке воткнуть переменную l вместо 1, а как на самом деле? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
semibug, я использую Qt, а там есть для этого forever:
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| C4sh |
|
||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 1.7.2010 Где: Харьков, Украина Репутация: нет Всего: нет |
Это не холивар. Дело в том, что VC 6.0 при стандартных настройках оптимизации генерировал разный код. При использовании while( 1 ) { __asm nop; } компилятор генерировал что то вроде:
А при использовании for( ;; ) { __asm nop; } было что то вроде:
(по памяти) -- Но сей час проверил на VC 2008 -- там генерируется одинаковый код что для фор, что для ваил:
Так что по сути сей час разницы нету что использовать. -- Ну это я описал с точки зрения оптимизации. А так сам использую for( ;; ) уже по привычке. |
||||||||||||
|
|||||||||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
константа справа
согласен, читабельность важнее. Я всегда пишу константу справа и не помню когда в последний раз вместо равенства писал присваивание, это никогда не было проблемой. Это сообщение отредактировал(а) azesmcar - 19.7.2010, 10:22 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |