1. C++ / Говнокод #17314

    +56

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    int GUIFont::getTextSize (std::string::iterator &begin, std::string::iterator &end ) { 
        int size = 0; 
        while(begin != end ) { 
            uint32_t id = utf8::unchecked::next (begin ); 
            CharDescriptor *cd = chars- >getChar(id); 
            size += cd- >xadvance; 
        } 
        return size;
    } 
    
    int GUIFont::getTextSize (std::string &text ) { 
        return getTextSize (text.begin (), text.end ());
    } 
    
    int GUIFont::getTextSize (std::wstring &text ) {
        std::string utf8text;
        utf8::utf16to8 (text.begin (), text.end (), back_inserter (utf8text ));
        return getTextSize (utf8text.begin (), utf8text.end ());
    }

    Вот так я зафейлил...
    И что самое главное - студия сожрала и даже ворнинга не кинула, а эклипс ни в какую.
    Без добрых людей на гейдеве не допер бы что к чему.

    Запостил: Pythoner, 15 Декабря 2014

    Комментарии (44) RSS

    • В чём ГК? Ну, кроме того, что по-хорошему ссылки и итераторы должны быть const.
      Ответить
      • > по-хорошему ссылки и итераторы должны быть const.
        Так и весь прикол в том, что студии это пофиг.
        А у гцц они обязаны быть const.
        Вечер убил, пока понял, почему нормально собирающийся под пк код никак не хочет собираться под андроид.
        ps мне простительно, я не проф программист)
        Ответить
        • Кстати, разве в GCC std::wstring - это UTF-16? Там же wchar_t 32-битный.
          Ответить
          • Бля-а-а-а-а-а-а...
            А здесь то не проверил.
            std::wstring exit(L"Выход");
            под студией работает, под эклипсом не хочет...
            Не, ну это вообще пиздец.
            Ответить
            • А -fshort-wchar не работает?
              Ответить
              • Не хочет, буржуйский хавает, на русском давится.
                Ответить
            • А говорили мэтры, что wchar_t бесполезен. Используй std::u16string заместо этого.
              Ответить
              • Оно вобще на L"Русский текст" дохнет.
                Ответить
                • в какой кодировке файл сохраняешь? Сохрани в UTF8.
                  Ответить
                • > Оно вобще на L"Русский текст" дохнет.
                  Текст ошибки в студию.
                  Ответить
                  • wchar_t *wstr = L"Русский текст";

                    converting to execution character set: Illegal byte sequence
                    Ответить
                    • Тогда и правда: http://govnokod.ru/17314#comment259442

                      Ну или -finput-charset=cp1251, что нежелательно.
                      Ответить
                      • Все, завелось, спс всем за советы.
                        В эклипсе кодировку utf8 поставил, с -fshort-wchar мусор в конце строки рисовался. Без него норм.
                        Только теперь в студии проблемы - поставил тоже юникод кодировку, в редакторе все норм, а шрифт рисует кракозябры.
                        Пздц, хоть бери и сохраняй файлы с русским текстом в двух кодировках.
                        Ответить
                        • > Только теперь в студии проблемы
                          Там поди ANSI'шные функции и литералы без L где-то юзаются?
                          Ответить
                          • Литералов без L вагон - SDL же, загрузка bmp, инициализация окна, да много где еще.
                            ANSI функции я то открыто не юзаю, но опять же SDL...
                            Ответить
                            • > Литералов без L вагон
                              Ну вот они все сейчас стали в utf-8, а код, скорее всего, продолжает думать, что там cp1251.
                              Ответить
                              • Почесал я репу, и решил грузить все русские строки из файла в utf8.
                                Хоть так помирю студию с эклипсом.
                                Блин, ну пусть я прогаю для себя, у меня на работе свободного время полно, не жалко.
                                Но как с этой байдой пишут кросплатформенные приложения те, кто этим зарабатывает.
                                Хотя о чем это я, грузят наверно тоже с ресурсов, нафиг строки хардкодить.
                                Ответить
                                • Нет, все работают в UTF8. У тебя СТУДИОПРОБЛЕМЫ.
                                  Ответить
                                  • Вариант на mingw перейти нормально?
                                    Только мне devcpp вобще никак.
                                    Как CodeBlock, можно им пользоваться?
                                    Ответить
                                    • > CodeBlocks
                                      Когда последний раз их видел - было ёбаным говном, которое подвисало на несколько секунд если написать точку (даже внутри литерала!). Сейчас может быть и получше.

                                      Из фришных ide стоит попробовать QtCreator.
                                      Ответить
                                      • Я нашел ее!! Черт побери, я нашел ide своей мечты!!!
                                        Code::Blocks - это неописуемо!
                                        А теперь серьезно - QtCreator проиграл в моих глазах именно из за Qt - я с ним никогда не имел дела, а если ide предлагает удобные средства для формошлепства, то было бы глупо ими не воспользоваться. Но изучать Qt лень...
                                        Поэтому Code::Blocks - wxWidgets мне знакомы по питону, много изучать не прийдется, а формошлепка может и пригодится.
                                        Зря ты так негативно о ней отозвался - она летает даже на моем убогом селероне. Вот эклипс - это действительно тупое глюкавое говно.
                                        Снес бы его нахрен, но нужен для комфортной отладки. А так то сборку под Андроид из под CodeBlocks настроил через вызов ndk-build - для проверки совместимости хватит, позже напишу какой то скрипт для полной сборки apk.
                                        Ответить
                                        • > она летает даже на моем убогом селероне. Вот эклипс - это действительно тупое глюкавое говно.
                                          Трудно не согласиться. Хотя старые версии эклипса (3.5+) если поотключать ненужное вроде не так много жрут, но это ж жаба.
                                          А какой селерон? Случайно не 600?
                                          Ответить
                                          • http://cnet.com/products/thinkpad-r51/
                                            Ответить
                                            • CPU:Intel Pentium M 735 / 1.7 GHz
                                              Ответить
                                              • Наклейка Celeron Pentium M.
                                                А в общем, похуй - 6 лет уже со мной, старичек, таскаю с собой на работу, я в охране работаю, ночи долгие, фильмы посмотреть можно, какую то игрушку детства, типа Master of Orion погамать, вспомнить школьные увлечения и покодить немного, в интернете пошастать... Вот и ночь проходит)
                                                Ответить
                                              • У меня тоже был 1,7 Ghz проц, все нормально стало, когда памяти добавил.
                                                Ответить
                                              • Ебать ты нищеброд
                                                Ответить
                                                • Времена, когда апгрейдиться надо было каждые 1,5 года, прошли, не?
                                                  Ответить
                                        • > Зря ты так негативно о ней отозвался
                                          Оно само по себе очень шустро работало, но по нажатию на точку, походу, парсило сишку с нуля, из-за чего я просто не мог ее юзать (а ide без автодополнения ничем не лучше обычного редактора).

                                          > QtCreator проиграл в моих глазах именно из за Qt
                                          Ну и зря. Qt там совсем необязательно юзать. Плюс у него кошерный отладчик.
                                          Ответить
                                          • Дополнение очень шустро работает.
                                            Ответить
                                          • У C::B есть ещё одна проблема: судя по всему он получает список файлов из каталогов где производится поиск заголовочных файлов при первом срабатывании автодополнения на инклюдах после запуска.

                                            В общем он подвешивает UI пока не получит искомое. А у меня MinGW находится на старом жёстком который отключается при простое.
                                            Ответить
                                • > решил грузить все русские строки из файла в utf8
                                  И это хорошее решение. Нефиг национальным символам делать в коде, если это не 1с.
                                  Ответить
                    • Л-текст
                      Ответить
    • size += cd- >xadvance;
      Ответить
      • Минус больше xadvance.
        Ответить
      • Это приколы копипаста в опере мини, где увидел поправил, здесь пропустил.
        Ответить
    • Просто вот не надо итераторы по ссылкам передавать, они к копированию должны быть приучены.

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

      Я мог бы рассказать, сколько боли принесла компиляция некоторых контейнеров TBB, авторы которых явно юзали ВС, кладущую на стандарт, но это слишком печальная и унылая история.
      Ответить
      • У меня первое знакомство с gcc так состоялось. До этого кутишную прогу пилил под виндой с вижуалкой, потом подумал - дай-ка скомпилю под линухой... После чего долго матерился на gcc и перепиливал свой говнокод - шаблоны внутри функций не понимало и т.п. И только потом я узнал, что виновата во всём вижуалка, а не gcc...
        Ответить
      • > Просто вот не надо итераторы по ссылкам передавать, они к копированию должны быть приучены.
        Так перфоманса захотелось, гуй же никак.
        Ответить
        • > Так перфоманса захотелось, гуй же никак.

          Ну да, если один несчастный указатель передавать по указателю, а не по значению, пирфоманс вырастет многократно, и гуй сразу перестанет лагать.
          Ответить
    • Напомнило примеры с STL из Шилдовских С++.
      У них там свои стандарты.
      Ответить
    • Что за гомоманера называть компилятор по иде??
      Ответить

    Добавить комментарий