Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Константа в левой части операции сравнения 
:(
    Опции темы
semibug
Дата 13.7.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Время от времени натыкаюсь в сети на рекомендацию использовать константы с левой стороны операции сравнения.
К примеру вместо
Код

if ( a == MAX_VALUE )
{
   ...
}

следует писать
Код

if ( MAX_VALUE == a )
{
   ...
}

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

PM   Вверх
chaos
Дата 13.7.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата(semibug @  13.7.2010,  13:28 Найти цитируемый пост)
 стоит ли отвыкать?

стоит привыкнуть.

ЗЫ сам даже в Java пишу так, а в AS3 например можно нарваться если пользоваться 1ым вариантом
PM WWW   Вверх
semibug
Дата 13.7.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



chaos, вы за вариант: "константу слева" ?
PM   Вверх
SenkraD
Дата 13.7.2010, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: нет
Всего: 23



semibug,  я за константу слева, что с уст моих коллег звучит как "писать сравнения в стиле Йоды"


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
borisbn
Дата 13.7.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Я раньше тоже писал как в первом варианте, потом пересилил себя и отвык. теперь пишу ТОЛЬКО как во втором, потому что возможные ошибки лучше убирать ( если это возможно, конечно ) на этапе компиляции, а не на этапе отладки или эксплуатации.

Вот ещё пример того, как уйти от ошибок на этапе компиляции:
Код

if ( expr )
   do_if_expr(); // comment this to have a provlem
do_anyway();

лучше заменить на
Код

if ( expr )
{
   do_if_expr(); // comment this without problem
}
do_anyway();

чтобы если нужно заремить do_if_expr() do_anyway() не выполнялась по условию.
Есть ещё рекомендация использовать шаблоны вместо макросов ( там есть проверка типов )

semibug, не возражаешь, если я задам вопрос в твоей теме ?
Кто-нибудь знает ещё такие же trick'и для того, чтобы избегать ошибок на этапе компиляции ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Abyx
Дата 13.7.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



Цитата(borisbn @  13.7.2010,  17:32 Найти цитируемый пост)
чтобы если нужно заремить do_if_expr() do_anyway() не выполнялась по условию.

для этого коментится и if тоже
в моей ИДЕ (msvs+VisualAssistX) это делается одной кнопкой "/"

PM MAIL   Вверх
boostcoder
Дата 13.7.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



константа слева
PM WWW   Вверх
maxim1000
Дата 13.7.2010, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



константа справа

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

а для поисков ошибок нужно смотреть на предупреждения компилятора, при желании можно его даже в ошибку переделать


--------------------
qqq
PM WWW   Вверх
Cheloveck
Дата 13.7.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



константа слева


--------------------
user posted image
PM Jabber   Вверх
boostcoder
Дата 13.7.2010, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(maxim1000 @  13.7.2010,  21:09 Найти цитируемый пост)
нужно смотреть на предупреждения компилятора

а что скажет компилятор?:
Код

int res = ...
if ( res = 0 ) {
}

PM WWW   Вверх
semibug
Дата 13.7.2010, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



boostcoder, MSVC даёт у меня С4706 (assignment within conditional expression), если включить Warning Level 4.

PM   Вверх
boostcoder
Дата 14.7.2010, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



а если так?:
Код

int res = ...
if ( res = somefunc() ) {
}

любопытно, на основании чего msvc принимает такое решение?
согласен, в первом варианте это логично предположить. а что компилятор скажет во втором случае?
PM WWW   Вверх
borisbn
Дата 14.7.2010, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Abyx @  13.7.2010,  19:50 Найти цитируемый пост)
для этого коментится и if тожев моей ИДЕ (msvs+VisualAssistX) это делается одной кнопкой "/"

В моей ИДЕ ( MSVS + VisualAssistX ) есть snippet
Цитата
if ( $end$ )
{
    
}

и потом, в expr может быть какое-то действие, например
Код

if ( ! sendToNetwork() )
...



Цитата(semibug @  13.7.2010,  23:40 Найти цитируемый пост)
если включить Warning Level 4

если включить Warning Level 4 у меня на Qt начинает матом ругаться, поэтому ограничиваюсь 3-м.
Так всё-таки, по поводу ещё таких же ухищрений. Кто-нибудь знает такого рода "правила" ?



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mrbrooks
Дата 14.7.2010, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



константа слева
PM MAIL   Вверх
ksili
Дата 14.7.2010, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(chaos @  13.7.2010,  20:32 Найти цитируемый пост)
в AS3 например можно нарваться если пользоваться 1ым вариантом

Смотря какая IDE. Например FDT подчеркивает это и помечает на полях. Так что не заметить невозможно.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.