- 1
- 2
- 3
- 4
- 5
uint16_t min_id, next_id, id;
if (id - min_id < next_id - min_id) {
// ...
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+136
uint16_t min_id, next_id, id;
if (id - min_id < next_id - min_id) {
// ...
}
Сегодня обнаружил в своем, не покрытом тестами, говнокоде этот эпик-фейл.
Окрестосишкоблядился, что называется, по полной программе.
Условие должно было проверять, лежит ли id в диапазоне [min_id; next_id) с учетом перехода через 0.
Например min_id = 0xFFFE, next_id = 0x0003, id = 0x0002 должно вернуть true, а min_id = 43, next_id = 44, id = 42 - false.
оказывается средствами iostream/iomanip невозможно вывести 3 как 0x0003
http://liveworkspace.org/code/3EwjLw$0
Православый printf хоть не идеален, но гораздо удобней.
Бустовик бустовика видит издалека.
Буст что дышло - куда повернешь, туда и вышло.
На буста надейся, а сам не плошай.
Буст - всему голова.
Джва креста - пара.
За крещеного двух некрещеных дают.
Не все то буст, что крестоблядство.
Что дефекейту буст, то Тарасу смерть.
В крестах и грабли стреляют.
Одно спасенье - крест да буст-либа.
В крестах хорошо, а с бустом лучше.
Или грабли в крестах, или проект в бустах.
геймдев
Модератор
Исходники буста
капча
Копипаста
Кормишь его он живет, а игноришь он уйдёт.
Срач разжигает, кресты с бустом обсирает.
А где коммент, который ты писал?
http://ideone.com/TSVH8m
ну ладно, я же явно указал надтип
http://ideone.com/9Smtb6
тут хз вообще это Range Checking Error, из-за опций она отключена, за результат язык ответственности не несёт
http://ideone.com/wpF2k4
То, что ты хотел
http://ideone.com/5JJET5
Вот, блядь, как нужно делать.
А вот это очень годная фишка. Именно это я и имел в виду, когда писал код.
А по кривым модулям умеет считать? Типа mod 7 или mod 42?
А почему они кривые?
nonbinary
Мда.
http://liveworkspace.org/code/4CAiXx$0
Решили сэкономить один and на процессорах не умеющих в мелочь, и всю мелочь превратили в инт (или уинт если в инт не войдет без потерь).
Поэтому, кстати, если поменять 16 на 32, то при sizeof(uint32_t) == sizeof(int) этот код будет работать без каких-либо проблем.
Какой ужас.
> этот код будет работать без каких-либо проблем.
Пока кто-то не решит "давно наступила 64-битная эра"
А компилер ворнингов не выдавал о неявном преобразовании типа?
Таки хорошо что в жабе unsigned выпилили.
Да-да. После таких приколов начинаешь понимать почему. Кстати его отсутствие там не особо и напрягает. Байтоебства и без него отлично делаются. А если нужны числа из диапазона 2^31..2^32, то в 80% там лучше смотрится long или что-нибудь с плавающей точкой.
Да. Но в жабе есть свои приколы (гораздо более очевидные):
http://ideone.com/gLRyhT
http://ideone.com/uhFaKp
Толку то. Вон я выше портанул свой код на шарп. Точно такой же баг без единого ворнинга.
> В жабе есть свои приколы
Мда. А почему в версии с += нет проверки?
http://ideone.com/dPpjlM
Так так я и в сишке могу. И оно, о боже, внезапно начнет правильно работать.
Если я засуну результат вычитания двух ушортов в ушорт, то несмотря на промежуточные касты я получу то что и хотел.
А если я засуну инт в ушорт, то насколько помню gcc выдаст ворнинг.
Так что шарп в пролете ;)
И я бы написал (знаю, задним умом все сильны, но я не обманываю) код так:
=> , то есть нужно описать 2 условия несмотря на кажущуюся очевидность первого.
И был бы уверен что оно железно.
i=1 a=1 b=2 вернет false, хотя 1 принадлежит [1; 2). Так что тут не i > 0, а i >= 0, а его для ушорта можно опустить.
Вот я и говорю - не надо опускать.
Так надежнее.
P.S. А тесты (которые я все-таки написал) оно проходит т.к. что при выходе за диапазон, что в таком случае один хер возвращается 0, и код по счастливой случайности работает корректно.
Только об этом писал, что 1 переполняет.
>Пора завязывать с байтоебствами
Не пора. Грамотное байтоебство в дельфе не тонет и в крестах не сбоит.
Ну и тесты конечно же. Куда без них?
Ты же знаешь, что не тонет на самом деле.
Мне кажется, или высокие абстракции работают тут лучше всякого битолюбства? P.S. Кто-нибудь, уберите от меня эти шаблоны, пока ещё не поздно...