Няшная / Говнокод #18885 Ссылка на оригинал

0

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

Запостил: 3_dar 3_dar, (Updated )

Комментарии (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);
          Ответить
            • Не, я не про сложение, я про определение своих функций. Чтоб вышенаписанное было вместо читерского использования*
              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));

                      * хотя, не на сишке, а на плюсах, но не в том соль.
                      Ответить
                      • Осталось в макросы записать вызовы деструкторов, и будет С++ на сишке.
                        Ответить
                                • Хочешь запустить его в интерпретаторе js на питоне?
                                  Ответить
                                  • что такое 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. А тем временем в десятке даже своему ядру доверять перестали и большую часть ядра вместе с дровами гоняют под гипервизором...
                                              Надоело что винда падает из-за дров на видюху?
                                              Ответить
                                • Курточка, иди напитон! с каких пор ты полюбила питон?
                                  Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8