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

    −22

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->someField), pBuffer , sizeof(someField)));
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->anotherField),  pBuffer + sizeof(someField), sizeof(anotherField)));
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->yetAnotherField), pBuffer + sizeof(someField) + sizeof(anotherField), sizeof(yetAnotherField)));
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->moreOfTheSame), pBuffer + sizeof(someField) + sizeof(anotherField) + sizeof(yetAnotherField), sizeof(moreOfTheSame)));
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->iamTiredOfThis), pBuffer + sizeof(someField) + sizeof(anotherField) + sizeof(yetAnotherField) + sizeof(moreOfTheSame), sizeof(iamTiredOfThis)));
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->butItDoesntEnd), pBuffer + sizeof(someField) + sizeof(anotherField) + sizeof(yetAnotherField) + sizeof(moreOfTheSame) + sizeof(iamTiredOfThis), sizeof(butItDoesntEnd)));
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->itGoesOnAndOn), pBuffer + sizeof(someField) + sizeof(anotherField) + sizeof(yetAnotherField) + sizeof(moreOfTheSame) + sizeof(iamTiredOfThis) + sizeof(butItDoesntEnd), sizeof(itGoesOnAndOn)));
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->godHaveMercyOnMe), pBuffer + sizeof(someField) + sizeof(anotherField) + sizeof(yetAnotherField) + sizeof(moreOfTheSame) + sizeof(iamTiredOfThis) + sizeof(butItDoesntEnd) + sizeof(itGoesOnAndOn), sizeof(godHaveMercyOnMe)));
    static_cast<void>(memcpy(reinterpret_cast<U8INT*>(&this->crcSum), pBuffer + sizeof(someField) + sizeof(anotherField) + sizeof(yetAnotherField) + sizeof(moreOfTheSame) + sizeof(iamTiredOfThis) + sizeof(butItDoesntEnd) + sizeof(itGoesOnAndOn) + sizeof(godHaveMercyOnMe), sizeof(crcSum)));

    сериализация сообщения в С++, следуя best practices Скота Маерса. (имена полей класса анонимизированы, все остально как в оригинале.)

    Запостил: Dummy00001, 18 Октября 2016

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

    • Ответить
    • Заставь дурака богу молиться - он и лоб расшибет!
      Ответить
    • А зачем кастить результат memcpy в войд?
      Ответить
      • если бы написли просто `(void)` то все бы сразу догадались. ЗЫ возврат функции нельзя игнорировать. если он не нужен - то тогда явно кастить в войд. самое смешное что у них и свой самописный аналог memcpy() есть - но тоже возвращает указатель на целевой буфер.
        Ответить
        • Это такое правило по мейерсу про возврат функции?
          Ответить
          • трюк с кастом в войд типичен. а маерс завещал что С касты это зло, и нужно пользоватся исключительно только С++ кастами.
            Ответить
            • Да знаю я про каст в войд для выключения ворнинга. Я спрашивал, зачем он тут. Ну ладно, проехали.
              Ответить
              • потому что memcpy() возвращает указатель на целевой буфер. ...?
                Ответить
          • Чтобы сишарпер не ругался. Типа функция возвращает значение, хули ты его игнорируешь.
            Ответить
    • Ответить
    • Мейерс виноват, ога.
      Я для подобной цели когда-то запилил
      https://github.com/roman-kashitsyn/encoding-binary
      Ответить

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