1. Си / Говнокод #18885

    −99

    1. 1
    2. 2
    3. 3
    4. 4
    int data;
    int* ptr;
    ...
    memcpy(&data, ptr, sizeof(int));

    Запостил: 3_dar, 17 Октября 2015

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

    • По-хорошему должно быть sizeof(*ptr) третим аргументом для универсальности.
      Особенно актуально когда подлежащие типы меняются в процессе разработки.
      Ответить
      • Тогда уж ради универсальности надо заменить memcpy на memmove на случай, если регионы, занятые переменной data и областью памяти, на которую указывает ptr, пересекаются.
        Ответить
        • uint32_t a;
          // a >>= 8 (LSB first)
          memmove(&a, (uint8_t*)&a + sizeof(uint8_t), sizeof(a) - sizeof(uint8_t));
          memset((uint8_t*)&a + sizeof(a) - sizeof(uint8_t), 0, sizeof(uint8_t));
          Ответить
          • Осталось только реализовать что-то вида
            BINARY(add) = begin_function();
              LOCAL(a); LOCAL(b);
              RETURN(OPERATOR_PLUS(a, b));
            end_function(add);
            Ответить
            • На PHP уже кто-то написал:
              https://github.com/Herzult/SimplePHPEasyPlus

              Энтерпрайзная библиотека для сложения двух чисел.
              Ответить
              • Не, я не про сложение, я про определение своих функций. Чтоб вышенаписанное было вместо читерского использования*
                int add(int a, int b){
                  return a+b;
                }

                А сам OPERATOR_PLUS Борманд наверно уже определил, теперь пьёт чай с бубликатеками и использует.
                _______________________
                * Ну, правда, определения таких функций были бы внутри одной главной функции, это да.
                Ответить
                • ЯННП
                  Ответить
                  • Я тоже, но не подал вида.
                    Ответить
                  • Вот в http://govnokod.ru/18885#comment300917 была определена замена для a >>= 8. Я предлагаю заполнить также для определения функций. begin_function будет получать каким-то (может быть, магическим) образом адрес текущего места, begin_function/end_function/RETURN будут работать со своим стеком, LOCAL будет доставать из стека значения и как-то связывать их с именами переменных.
                    (Возможно, вместо a,b придётся писать GET_LOCAL(a), GET_LOCAL(b); Возможно, вызывать созданную функцию придётся не как add(3,4), а как CALL(add, 3,4), но это даже лучше)
                    Ответить
                    • Типа интерпретатора на сишке?
                      Ответить
                      • Нет, просто какое-то убожество.
                        Ответить
                      • Ммм... Не знаю, проще показать.*
                        Вот, дописал: http://ideone.com/MvbZIh
                        BEGIN_FUNCTION(fac);
                          if(ARG1 <= 1) RETURN(1);
                          CALL1(fac, ARG1 - 1, LOCAL(a));
                          RETURN(LOCAL(a) * ARG1);
                        END_FUNCTION(fac);
                        
                        CALL1(fac, 5, GLOBAL(fac5));

                        * хотя, не на сишке, а на плюсах, но не в том соль.
                        Ответить
                        • Твои бы старания, да в полезное русло.
                          Ответить
                        • Осталось в макросы записать вызовы деструкторов, и будет С++ на сишке.
                          Ответить
                          • C++ на C++
                            Ответить
                            • In as much as Spirit attempts to mimic EBNF in C++, Phoenix attempts to mimic C++ in C++!!!
                              http://www.boost.org/doc/libs/1_41_0/libs/spirit/classic/doc/phoenix.html
                              Ответить
                              • Напомнило:
                                https://github.com/ircmaxell/PHPPHP
                                Ответить
                                • а интерпретатора питона на js нет? я джва года...
                                  Ответить
                                  • Хочешь запустить его в интерпретаторе js на питоне?
                                    Ответить
                                    • хочу писать для браузера на питоне.
                                      Ответить
                                      • Браузер, иди на питон, браузер.
                                        Ответить
                                      • А чем Jython не нравится? Ах, да, из Хрома обещают выпилить NPAPI, да и Мозилла грозится тем же...
                                        Ответить
                                  • cpython + emscripten?
                                    Ответить
                                    • что такое cpython я знаю а что такое emscripten. А то гугл выдает какую то мутную статью на хабре.
                                      Ответить
                                      • чини свой гугл
                                        мой выдаёт ссылку на жидхаб с описанием: An LLVM to JavaScript compiler
                                        Ответить
                                      • Гугл вообще мутный. Яндекс первой строкой выдаёт ссылку на emscripten.org, второй строкой — ссылку на статью в Википедии, а четвёртой строкой — ссылку на Гитхаб, а дальше — статьи на Opennet и на MDN.

                                        Стоп! Но мне и Гугл выдаёт те же ссылки (только в другом порядке).

                                        Признавайся, что ты искал в Гугле перед этим! Он же теперь реализует filter bubble, т. е. выдаёт рекомендации на основе истории твоих запросов.
                                        Ответить
                                        • xxx: Почему гугл показывает сайты о пидорасах?
                                          * yyy удалил вас из контактов
                                          Ответить
                                          • xxx: Почему гугл на слово "почему" показывает подсказку: "Почему гугл показывает сайты о пидорасах?"
                                            Ответить
                                          • > yyy удалил вас из контактов

                                            Теперь понятно, почему соцсети перестали показывать уведомления об удалении из друзей, а показывают только уведомления о добавлении. Они хотят что-то скрыть.
                                            Ответить
                                          • Видел в реале, человек пожаловался на форуме что ему показывают гей-рекламу на игровом форуме. Кстати, а можно другому человеку это как-то организовать даже имея доступ к его компу?
                                            Ответить
                                        • я кнопку нажал только сайты на русском языке. Вот он мне только ссылка ну хабр показал.
                                          Ответить
                                    • Слышал, что кто-то пытался скомпилировать на emscripten ядро Линукса...
                                      Ответить
                                      • > на emscripten ядро Линукса
                                        Ну я только jslinux видел. Но там прям эмулятор i386. Даже gcc работало... Интересно, сколько лет будет на нём компилиться ядро?
                                        Ответить
                                        • > сколько лет будет на нём компилиться ядро?
                                          Будущее: мегагерцы устарели, гигафлопсы устарели, количество ядер устарело, оверклокеры и школьники меряются количеством слоёв ВМ в браузере, для которых ядро компилируется 1 год.

                                          -- А у меня компьютер - 0.014 электронного года. Щас как килобиткойны попрут!
                                          -- Лошара! У меня 0.2ЭГ стоит только на планшете!
                                          Ответить
                                          • ерунда
                                            ядро скоро будет компилиться год и без всяких виртуализаций
                                            туда столько говна тащат, что у него вот-вот случится гравитационный коллапс
                                            Ответить
                                            • > гравитационный коллапс
                                              А ведь всё это говно работает в ring 0 и представляет замечательную поверхность для атаки...

                                              P.S. А тем временем в десятке даже своему ядру доверять перестали и большую часть ядра вместе с дровами гоняют под гипервизором...
                                              Ответить
                                              • Это сговор разрабов ПО и производителей железа. Потом каждому процессу по гипервизору с обособленным инстансом ОС.
                                                Ответить
                                                • >Это сговор разрабов ПО и производителей железа.
                                                  Сказки десятилетней давности, когда раз в 2 года надо было комп менять.
                                                  Ответить
                                              • >А ведь всё это говно работает в ring 0 и представляет замечательную поверхность для атаки...
                                                ПРЫЩЕБЛЯДИ СОСНУЛИ (да они и не вынимали).

                                                >P.S. А тем временем в десятке даже своему ядру доверять перестали и большую часть ядра вместе с дровами гоняют под гипервизором...
                                                Надоело что винда падает из-за дров на видюху?
                                                Ответить
                                  • Курточка, иди напитон! с каких пор ты полюбила питон?
                                    Ответить

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