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

Поиск:

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


любитель
****


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

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



Цитата(boostcoder @  13.7.2010,  23:07 Найти цитируемый пост)
любопытно, на основании чего msvc принимает такое решение?

не только msvc.. 
Предполагается что в _условиях_ правильна лишь инициализация, но не присваивание.. 
т.е. если этот код вызовет предупреждение:
Цитата(boostcoder @  13.7.2010,  23:07 Найти цитируемый пост)
Код

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

то этот вполне легален:
Код

if ( int res = somefunc() ) {}


Это сообщение отредактировал(а) mes - 14.7.2010, 09:25


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


Пердупержденный
***


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

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



Не обращаю внимания на эту мелочь, пишу так, как с языка слетает (что с чем сравнивать). ИМХО проблема надуманая, но странно, что идею еще никто не довел до идиотизма
Код

template<typename T1,typename T2>
inline bool eq(T1 const &l, T2 const &r){
return l==r;}

и отказу от == в коде.

Это сообщение отредактировал(а) djamshud - 14.7.2010, 09:25


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 14.7.2010, 09:26 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(djamshud @  14.7.2010,  08:24 Найти цитируемый пост)
, как с языка слетает

как с языка слетает, зависит от привычки. У всех ( с опытом ) кто написал _слева_, именно так и слетает с языка 
smile


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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



константа справа.
Ошибался только в начале (когда после паскаля пересел на С), сейчас крайне редко (все случаи, что я помню, исправлял тут же). Думаю, потому что компилятор выдает предупреждение. Оно конечно раздражает, когда надо действительно использовать присваивание внутри условия (if (f = fopen(...))... ), но никто не мешает использовать еще одни скобки.
PM   Вверх
semibug
Дата 14.7.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



borisbn, такой ещё трик он же сюжет для холивара заметил - писать бесконечный цикл лучше

Код

for ( ;; )
{
  ..
}


чем

Код

while ( 1 )
{
  ..
}


Рекомендовано варнингом студии. Первое, что пришло в голову, в while можно по ошибке воткнуть переменную l вместо 1, а как на самом деле?

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


любитель
****


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

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



Цитата(semibug @  14.7.2010,  18:08 Найти цитируемый пост)
Первое, что пришло в голову, в while можно по ошибке воткнуть переменную l вместо 1, а как на самом деле?

имхо, из за того что условие безусловное.



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


Эксперт
****


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

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



semibug, я использую Qt, а там есть для этого forever:
Код

forever {
 ...
}



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


Новичок



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

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



Цитата(semibug @ 14.7.2010,  19:08)
borisbn, такой ещё трик он же сюжет для холивара заметил - писать бесконечный цикл лучше

Код

for ( ;; )
{
  ..
}


чем

Код

while ( 1 )
{
  ..
}


Рекомендовано варнингом студии. Первое, что пришло в голову, в while можно по ошибке воткнуть переменную l вместо 1, а как на самом деле?

Это не холивар. Дело в том, что VC 6.0 при стандартных настройках оптимизации генерировал разный код.

При использовании while( 1 ) { __asm nop; } компилятор генерировал что то вроде:

Код

mov eax, 1
test eax, eax
je ...
nop              
jmp ...


А при использовании for( ;; ) { __asm nop; } было что то вроде:

Код

nop              
jmp ...


(по памяти)

--
Но сей час проверил на VC 2008 -- там генерируется одинаковый код что для фор, что для ваил:

Код

...
00401000  nop              
00401001  jmp         WinMain (401000h) 
...


Так что по сути сей час разницы нету что использовать.
--
Ну это я описал с точки зрения оптимизации. А так сам использую for( ;; ) уже по привычке.
PM MAIL Jabber   Вверх
azesmcar
Дата 19.7.2010, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



константа справа smile 
Цитата(maxim1000 @  13.7.2010,  21:09 Найти цитируемый пост)
я никогда не замечал, чтобы в обсуждении алгоритмов люди говорили "и если 2 равно иксу, то...", а читабельность - немаловажное свойство кода

согласен, читабельность важнее.
Я всегда пишу константу справа и не помню когда в последний раз вместо равенства писал присваивание, это никогда не было проблемой.

Это сообщение отредактировал(а) azesmcar - 19.7.2010, 10:22
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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