![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
Есть вопрос… Точнее даже предложение скидывать в этой теме свои примеры:
Что имеется в виду: А имеется в виду преобразование допусти ERROR в 0xBAD или DWORD ver = MAKEWORD(2,2); WSAStartup(ver,&wsa); В: WSAStartup(0x0202,&wsa); Это сообщение отредактировал(а) drZmeu - 5.2.2007, 22:55 --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
DWORD ver = MEKAWORD(2,2);
ты наверное имел в виду:
и что-же по-твоему красивее и компактнее ? -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
ИМХО, по теме есть хорошая книжка
Керниган, Пайк "Практика программирования" -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
Я имел в виду
замену DWORD ver = MAKEWORD(2,2); на 0x0202 ... --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
Vyacheslav |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
это типа, что красиввее
или
? ![]() -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
V.A.KeRneL |
|
|||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: 1 Всего: 14 |
Имхо, дело вкуса. А больше контекста (кода, в котором находится строчка/строки). Главное, в общем случае, чтобы было максимально понятно и прозрачно именно в данном конкретном случае.
-------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
|||
|
||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
V.A.KeRneL -> Я с тобой полностью согласен
![]() --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
EvgenZ |
|
||||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
Дяденька Дьюхэрст.
что эквивалентно:
-------------------- <удалено администрацией форума> |
||||
|
|||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Читать такое невозможно, а код порождается ИМХО такой же как в if-ах |
|||
|
||||
Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
Получение максимально короткого, правильного и быстрого кода - все это оптимизация, которая, в конечном счете в любом случае необходима, т. к. конечного пользователя всегда интересует производительность.
|
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
ни с кем не спорю, просто интересный, на мой взгляд, пример:
как считаете, насколько красиво варьировать значение константы при инициализации? Мне кажется, что это может лишь запутать код, интересно зачем тогда оставлена такая возможность? Побочный эффект? |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Дурное дело нехитрое... ![]() Хотя с другой стороны, может я хочу иметь случайное число, которое генерируется во время старта и не должно изменяться после этого? Константы вообще константны тем, что их нельзя изменить после инициализации, а как их инициализируют, это дело программиста. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
я могу сказать в соторону MAKEWORD(2,2), а не в сторону 0х202
что она читабельнее, и независима от платформы, т.е. более переносима. ( если оставим факт, что MAKEWORD - макро из винды ) даже более, я бы сделал вообще так:
вот. читабельность в 99% важнее, чем мнимая оптимальность кода на высоком языке - как Си/Си++, так как компилятор занимается оптимизацией кода. Ессно, что алгоритмически должна быть оптимальность, но не в таком направлении как здесь: и читабельный и нечитабельный код соберутся в идентичный бинарник, поэтому нет смысла код запутывать ( а потом через пару лет шаманить с бубном, пытаясь понять его ) вот вам мои 5 коп. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Коллеги. Кокой вопрос здесь может идти о красоте кода, когда реальный код просто напросто подменяется его результатом, подсчитанным в "уме"? Если придерживаться этого принципа, то в идеале любая расчетная задача сначала подсчитывается в уме, а потом вместо алгоритма просто пишем код по выводу готового ответа и заявляем:"Это очень красивый и лаконичный код" -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Современные компиляторы и так все хорошо оптимизируют. И писать надо так, чтобы код максимально легко читался (человеком). -------------------- i_i (';') (V) ![]() |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
не совсем понимаю о чем вы. Если я вас правильно понимаю, всё что написано в файлах, которые скармливают компилятору - и макро и процедуры и т.д. - это всё "код", и не важно подменяется ли часть его препроцессором или нет, главное, чтобы в исходной форме он был понятен читателю ( да и писателю ![]() -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
Vyacheslav |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
О "красоте" конкретного примера ![]()
В данном случае выясняем, что делает MAKEWORD(2,2) и делаем это вместо него в уме. Результат подставляем в код
-------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
Я за:
-------------------- ![]() |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
Вячеслав. извините конечно, как говорится "the beauty is in the eye of the beholder", т.е. красота - в глазах узрившего. вы понимаете, что вы просто таким действием сказали Бьярну Страуструпу, что он полный страус ? что-то из серии: "Бьярн, вот скажите, ну на фига было придумывать препроцессоры, макро в Си++?" повторяю. когда вы работаете с 1 числом, которое нужно создать таким образом его можно запомнить, и чтить. а если таких скомпонованных чисел десятки или сотни ? для этого и придумали МАКРО. мейкворд создаёт слово, это к версии не относится, поэтому создаём надстройку: мейквершен. и тогда даже через 200 лет, если люди будут программировать, прочитая этот код, понятно, что данная строка: version=MAKEVERSION(2,3) как то создаёт число-версию. пока. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
эээ... если я правильно уловил суть, вы оба - за то, чтоб не делать работу за препроцессор, создавая более запутанный и непонятный код ![]() ![]() никто не спорит. но добиваться скорости путем проделывания работы за препроцессор, замену умножения сдвигом и т.д. - это просто какая-то мания. или фобия. особенно, когда при этом массив на 1500 элементов сортируется "пузырьком" ![]() |
|||
|
||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
Sorry давайе не будем сорится
![]() Я несупер кодер на C++ но стараюсь стать лучше... Любые претензии в мой адрес выслушаю... мне интересно если я делаю так: DWORD ver=MAKEWORD(2,2); WSAStartup(ver,&wsa); то тут я ещё обьявляю переменную DWORD...] А если я делаю так WSAStartup(0x0202,&wsa); То тут мне не приходится обьявлять эту переменную... Код стаёт меньше... Но я незнаю что конкретно получится в .exe файле... Если логически посудить то получится что размер должен уменьшится ![]() --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Простите Вы топик от начала до конца прочитали? Что такое смайлики в курс?. Что понимается под "красотой" можете сообразить? ( в кавычках ) А если в курсе нефиг читать мне нотации. Я тут весь топик пытаюсь доказать, что такая замена никак не тянет на красивый код. Причем подробно разъясняю свою точку зрения. А Вы мне страусом грозите. "пока" -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Что же я считаю действительно красивым кодом, то Вы можете судить по данному фрагменту
http://forum.vingrad.ru/index.php?showtopi...t&p=1011551 Это решение мне понравилось, даже несмотря на то что я его автор ![]() Добавлено @ 14:28
И кстати, только счас обратил внимание. А Вы сами а Страступа читали? В смысле не последние, а первые редакции, где он прямо говорит об нежелательности использовать макросы в С++ ![]() -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
SergeCpp |
|
||||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Vyacheslav, main возвращает int, вообще-то
Вот Ваш текст
А вот на такой текст мне смотреть приятнее
P.S. Исправил multiset<string> на multiset< string > (см. вопрос ниже). Прошу извинить за невнимательность. В рабочем коде (при многочисленных просматриваниях) я бы это непременно заметил и поправил. Неудобно тут писать ![]() ![]() Это сообщение отредактировал(а) SergeCpp - 8.2.2007, 09:29 |
||||
|
|||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Да. Это конечно очень серьезная ошибка, не спорю ![]() В смысле скопировать и через строчку? Да без разницы. Раз нравится - пишите через строчку. Вопрос не в том, как располагать, а в том что поставленная задача потребовала 5 строчек кода. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
SergeCpp, скажи, а почему в
отступов нет, а в каждый из двух типов обрамлен пробелами? я не прикапываюсь, просто интересно ![]() здесь ведь речь не об эффективности, а об эстетике, правда? а тут уже личные вкусы играют роль ![]() |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
В плюсах по стандарту main может ничего не возвращать (хотя в сигнатуре пишется int) - подразумевается 0. Ну тогда почему здесь перед звёздочкой нет пробела, а после есть? ![]() ![]()
drZmeu, разочарую тебя - уж столь отривиальные случаи компилер точно сведёт в одно. Оптимизатор в современном компиляторе - очень жестокая вещь. Он мжоет перевернуть код гораздо серьёзнй (без последствий логике). |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
+1 скорее "современные компиляторы добавят return 0, если такового не имеется" -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Можно сказать точнее - "явно ничего не возвращать".
|
|||
|
||||
Vyacheslav |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Ну тогда извините. Под красотой я прежде всего понимаю возможность максимальное использование возможностей языка, а не отступы, строчки - черезстрочки. Хотя для читабельности кода это играет далеко не второстепенную роль. И для меня одним из фрагментов, написанных на С++, который стразу приходят на ум когда говорят о красивом коде, является фрагмент из двух строчек, помещенных в предисловии Скотта Мейерса к книге Александреску "Современное проектировние на С++"
-------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
это я конечно загнул, для полного стирания кода из моей памяти нужно просто зкончить один проект, и перейти на другой. т.е. и пары месяцев хватает чтобы ПОЛНОСТЬЮ забыть что я там написал. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Вспомнилось... Занимался я как-то извлечением механизма обработки регулярных выражений из Perl'а...
Увидел исходники... Брался несколько раз и откладывал... Потом как-то набрался мужества и осилил ![]() Столько там встретил интересного ![]() В общем, считай, заново переписал Ужас — одно слово. Просто — ужас Вот сейчас скачал версию 5.8.8 stable Полюбуйтесь на файл regcomp.c Вот функция, имеющая отношение к оптимизации регулярного выражения... Ровно 1000 строк! Ну, чуть больше, просто в SciTE сейчас смотрю, свернул её "плюсиком", открывающая скобка на 674 строке, а следующая за свёрнутым блоком строка — 1674 ![]() Пусть Ларри Уоллу будет стыдно ![]()
А метка в конце — finish ![]() |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
SergeCpp, чего-то я перехода на этот финиш тут не вижу
![]() ЗЫ Упс сорри . Наверно он здесь
Но вообще то действительно финиш ![]() Это сообщение отредактировал(а) Sartorius - 8.2.2007, 13:24 |
|||
|
||||
comnimh |
|
||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.4.2006 Репутация: нет Всего: нет |
Читаю ветку и сижу удивляюсь, как такая толпа сишников могла забыть про byte order.
Ведь результат работы:
В винде это будет, как я понимаю (не знаю, как там работает MAKEWORD, сорри) 0x0203 (host order), а вот в той же FreeBSD уже будет 0x03020000 (в случае DWORD, в WORD будет 0x0302) (network order). И, уже говоря об оптимизации - зачем объявлять эту переменную DWORD и потом присваивать ей вывод MAKEWORD? Два байта лишних ![]() Это сообщение отредактировал(а) comnimh - 11.2.2007, 18:15 |
||||
|
|||||
FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
DWORD = unsigned long; sizeof(DWORD) = 4! Это сообщение отредактировал(а) FelikZ - 11.2.2007, 18:19 -------------------- ![]() |
|||
|
||||
comnimh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.4.2006 Репутация: нет Всего: нет |
FelikZ, ну да. Все правильно. Размер DWORD - 4 байта, они пишут в него WORD, размер которого - два байта. Итого два байта лишних.
|
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
comnimh, a как вы запишите версию вида: 3.21 ?
-------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
comnimh, звеняй не так понел
![]()
когда можно просто подставить MAKEWORD(2,3) куда надо? -------------------- ![]() |
|||
|
||||
comnimh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.4.2006 Репутация: нет Всего: нет |
bilbobagginz, 3.21 влезет в WORD, если вы об этом.
Если о byte order - то тогда - тест на это на этапе ./configure и соответствующие телодвижения при компиляции. А вообще, честно говоря, не понимаю, зачем хранить версию таким образом. Гораздо проще, на мой взгляд, сделать:
Добавлено @ 18:37 FelikZ, ну мало ли - не факт, что ты будешь один раз в программе использовать эту переменную. |
|||
|
||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Ребята кто знает где взять? Давно ищу... |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |