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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    class std::unordered_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,
    enum REG,struct std::hash<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,
    struct std::equal_to<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,
    class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,
    class std::allocator<char> > const ,enum REG> > > registers" 
    (?registers@@3V?$unordered_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@W4REG@@U?$hash@V?$
    basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@U?$equal_to@V?$basic_string@DU?$char_traits@D@std@@V?
    $allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@W4
    REG@@@std@@@2@@std@@A) уже определен в decoder.obj	PVC-16	C:\Users\Люда\source\repos\PVC-16\PVC-16\interrupt.obj	1

    Похлопаем visual c++ за понятный лог.

    Запостил: digitalEugene, 30 Сентября 2020

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

    • Привыкай.

      Ты переменную в хедере объявил, судя по всему. Она попала в джве цппшки и линкер теперь ругается.
      Ответить
      • > объявил
        > C:\Users\Люда
        Какой багор )))

        Но да, у крестовиков нарушение ODR — смертный грех.

        Зато в «C++17» завезли inline переменные (и функции), можно течь.
        Ответить
        • инлайн переменные были и в С++03, через анонимный неймспейс
          Ответить
          • Нет, это не настоящая инлайн пельменная. Фишка inline переменных и функций из C++17 в том, что конпелятор создаёт единственный их экземпляр и расшаривает его на все единицы трансляции. А старые трюки с неймспейсом и static создают в каждой единице трансляции новую переменную/функцию. Реальный пример:
            // header.h
            #pragma once
            #include <iostream>
            
            inline int x_inline = 0;
            static int x_static = 0;
            namespace {
                int x_namespace = 0;
            }
            
            void test_1();
            void test_2();
            
            
            // test_1.cpp
            #include "header.h"
            
            void test_1()
            {
                std::cout << "test_1: inline = " << x_inline << "; static = " << x_static << "; namespace = " << x_namespace << std::endl;
            }
            
            
            // test_2.cpp
            #include "header.h"
            
            void test_2()
            {
                std::cout << "test_2: inline = " << x_inline << "; static = " << x_static << "; namespace = " << x_namespace << std::endl;
            }
            
            
            int main()
            {
                x_inline = 42;
                x_static = 42;
                x_namespace = 42;
            
                test_1();
                test_2();
            
                return 0;
            }

            В результате выполнения получаем:
            test_1: inline = 42; static = 0; namespace = 0
            test_2: inline = 42; static = 42; namespace = 42
            Ответить
        • > Портянки крестовых кишков
          > C:\Users\Люда

          Тоже орнул.
          Ответить
          • Кресты меняют людей — раньше он был Евгением.
            Ответить
            • https://cs10.pikabu.ru/images/big_size_comm/2020-04_2/1586269815162366212.jpg
              Ответить
              • Необязательно. Программистки часто так шифруются, чтобы их не доебывали всякие задроты со спермотоксикозом (типа ммм тяночка-программист, давай знакомиться, будем под пледиком сидеть и заниматься парным программированием).
                Ответить
                • При чем тут программистки? Про любую профессию нельзя также сказать?
                  Ответить
                  • Ну например точно нельзя про воспитательниц в детском саду, училок в школе, швей, бухгалтерш, официанток, продавщиц в магазинах.
                    Ответить
                    • Не понял тебя.
                      Для них неопределённо «Будем вместе под пледиком заниматься парным <professiya_name>»?
                      Или ты про то, что задротов среди программистов больше?
                      Ответить
                • Почему при слове парное программирование у меня всплывает такая картинка?
                  https://ic.pics.livejournal.com/avva/111931/78594/78594_original.jpg
                  Ответить
            • Смотрю на это и на коммент Борманда.
              Там надо стоило оставить только: Привыкай.
              Ответить
            • Позвала Люда Евгения с компьютером помочь

              Он-то думал, что надо будет винду переустановить и сразу на чай
              Ответить
              • А он, долбоеб, даже крестушни без ошибок написать не смог
                Ответить
      • да я просто хотел написать про офигенный лог visual c++, я в этот момент просто в коде inline не проставил и все...
        Ответить
    • PVC-16.
      Характеристики изделия.
      Weight 7.2 kg.
      Max working pressure 12 bar.
      Hose inside dia 5/8 in.
      Hose inside dia 16 mm.
      Ответить
    • Синхронизация этого говна в xyz временно отключена.
      Ответить
      • А что случилось?
        Ответить
        • Вероятно много собачек распидорасили нежный пхп-код )))
          Ответить
          • Какой undefined behavior )))

            Нарушение крестового ODR даже телеграм бота на другом краю земли порвало.
            Ответить
        • В телеграмм начало спамить каждые 5 минут. Видимо из-за "email_protected"
          Ответить
          • def normalize_text(s: str) -> str:
                s = s.replace("&#13;", "")
            
                res = ""
                while True:
                    m = re.search(r'<a.*?data-cfemail="(.*?)">.*?</a>', s)
                    if not m:
                        break
            
                    encoded = bytes.fromhex(m.group(1))
                    key = encoded[0]
                    decoded = "".join([chr(c ^ key) for c in encoded[1:]])
            
                    res += s[:m.start()]
                    res += decoded
                    s = s[m.end():]
            
                return res + s

            Переведи на «PHP».
            Ответить
            • Уже есть код. Только он посты и никнеймы не парсит. Какой багор ))) А надо было всю страницу.
              И в проблеме-следствии тоже нужно разобраться. Это не должно приводить к циклической отправке.
              Ответить
    • Людмила, это С++. Тут часто такое бывает. gcc бы сделал точно так же, и шланг. Это не проблема вижалсей.
      Ответить
      • Нужно проверять. Clang, кажется, понятнее срёт.
        Ответить
        • Ну и gcc сейчас тоже цветные сообщения со стрелочками научился делать. Но от бустовых портянок на тысячи строк это не спасает.
          Ответить
          • > Но от бустовых портянок на тысячи строк это не спасает
            Rule of thumb: крестовые ошибки надо читать сверху вниз, справа налево. Тогда ещё можно разобраться.
            Ответить
            • Не, их надо читать как сишные функции, из середины. Строчка, которая указывает на твой код, обычно где-то там. А текст ошибки в крестах-бустах разве кто-то читает?
              Ответить
              • а конпеляторы не могут делать подстановку типов к алиасу? хотя бы сворачивать std::basic_string<...> к std::string в выхлопе?
                а выхлоп в жсоне выгружать, как взрослые
                Ответить
                • ЕМНИП, компиляторы эти алиасы раскрывают на какой-то очень-очень ранней стадии, сильно раньше генерации ошибок.
                  Ну и на самом деле это полезно, чтобы понимать, на что конкретно компилятор орёт, а не пытаться в блокнотике самому все алиасы раскрывать, рекурсивно.
                  Ответить
                  • > в блокнотике самому все алиасы раскрывать

                    Кстати, кнопочками в хтмле удобно было бы раскрывать до нужного уровня. Видимо поэтому Ди предлагает json.
                    Ответить
                • -fdiagnostics-format=json?

                  Я думал он тело сообщения тоже структурно покажет, а там всё в кучу и текстом ;(

                  Ну хоть на блоки разбивает по всем этим "candidate" и "in instantiation of".
                  Ответить
                • Не нужно, потому что может быть ошибка подстановки шаблона, в Modern C++ даже через них автор предлагает отлаживать сложные шаблоны.
                  Ответить
              • Не, релевантна-то самая первая ошибка, а после неё компилятор полностью пидорасит, и он вываваливает сотню-другую бесполезных вореций.

                А в пределах одной ошибки я обычно тоже читаю сверху вниз: в самом начале смотрю, что конкретно компилятору не нравится, а потом уже листаю in instantiation of вниз до своего кода.
                Ответить
                • У человека, который никогда вчитывался в ошибку инстанциации шаблона буста, нет сердца. У человека, который после этого не перешёл с С++ и буста на другой язык (или другие либы), нет мозгов.
                  Ответить
        • Подтверждаю. По опыту, в «Visual Studio» самые херовые ошибки (нихуя не понятно). В «GCC» чуть получше, а «clang» срёт ошибками лучше всех: они у него более короткие, более точные, более понятные и более «узкие».
          Реальных примеров сейчас не приведу, но когда у меня ломается какая-то метушня и надо разбирать сотню-другую килобат ошибок — обычно достаточно скомпилировать тот же самый кусок кода в «clang» и всё станет понятнее. Вон, когда «Brainfuck» на шоблонах пилил — пару раз пришлось смотреть на ошибки в «clang» (он, в частности, наиболее наглядно продемонстрировал ошибку с кривым шаблоном operator<<()).
          Ответить
      • если бы оно хотя бы не было локализовано

        (зачем вообще локализовывать выхлоп компилятора??)
        Ответить
        • А чтоб ты заебался его читать если в IDE или консоли кодировка не та.
          Ответить
        • >(зачем вообще локализовывать выхлоп компилятора??)
          а IDE зачем?

          чтобы ржать
          Ответить
    • С полстраницы говна, приправленного жонглированными именами функций.
      Как вы их вообще парсите?

      Помницца минэ, c++ builder 6 мог клепать exe, из которых экспортировались подобные же функции, причем ребята из борланд ещё и рекомендовали вызов методов из *.exe как должное.
      Ответить
      • >причем ребята из борланд ещё и рекомендовали вызов методов из *.exe как должное
        нельзя так. для этого есть dll

        не жонглироваными а манглироваными
        runtime library и твой билд были сшиты вместе, и приложение вызывало функции само из себя.
        Ответить
    • Кстати, автор Пиваса сюда уже не заходит?
      Ответить

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