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

    +993

    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
    if(layerHeader.mFlags&AE_ANIM_BEZIER_EFFECT)
    {
    		btlv=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		btlt=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		btrt=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		brtv=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		brtt=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		brbt=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		bbrv=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		bbrt=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		bblt=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		blbv=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		blbt=(Point*)calloc(layer->frames.size(),sizeof(Point));
    		bltt=(Point*)calloc(layer->frames.size(),sizeof(Point));
    }

    Запостил: lifemaker, 16 Марта 2012

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

    • так а в чем говнокод-то?
      Ответить
    • Им бы копипаст взять и отменить
      Ответить
    • btlv=btlt=btrt=brtv=brtt=brbt=bbrv=bbrt=bblt=blbv=blbt=bltt=
        (Point*)calloc(layer->frames.size(),sizeof(Point));

      Fixed.
      Ответить
    • при работе с безье вполне нормально, у каждой точки осмысленные названия, я сам такие-же делал. Это реально удобно, и нельзя их просто в массив загонять т.к. они имеют каждая своё значение.
      Ответить
      • Хм...
        union
        {
          struct { PointPtr btlv, btlt, btrt, brtv, brtt, brbt, bbrv, bbrt, bblt, blbv, blbt, bltt; }
          PointPtr b[12];
        };

        интересно, имеет ли смысл?
        Ответить
        • главное, не забыть про танцы с #pragma pack (благо, его большая часть компиляторов понимает).

          #pragma pack(push) /* push current alignment to stack */
          #pragma pack(1) /* set alignment to 1 byte boundary */

          ...

          #pragma pack(pop) /* restore original alignment from stack */
          Ответить
        • Тут может и да, но я это писал на ActionScript 3.0 который так не умеет.
          Ответить
        • Работать может, но это тем не мнее - класска говнохакинга. Автору исходного кода надо было изначально сделать енум и массив, т.е. (на правах эскиза)

          enum B { btlv, btlt, btrt, brtv, brtt, brbt, bbrv, bbrt, bblt, blbv, blbt, bltt, b_count_ };
          Point* b[b_count_];
          Ответить
      • >Это реально удобно, и нельзя их просто в массив загонять т.к. они имеют каждая своё значение.
        А что обычно люди создают массивы, в которых переменные НЕ имеют каждая своё значение.
        Ответить
        • Я имею в виду то, что имена их осмысленны, и имя каждой переменной имеет значение.
          Ответить
        • Товарищ наверное имел в виду смысл, то есть название. А вовсе не значение, которое хранится в памяти.
          Ответить
          • 2 absolut, aquahawk
            Именно для этих целей придумали ассоциативные массивы.
            Ответить
    • Удивляет, что код заявлен как c++, а написан в c-стиле
      Ответить
      • Такой постановки вопроса "Где здесь С++?" я еще не видел.
        Ответить
      • Сишник бы написал отдельный оператор разыменования и оператор взятия поля: (*layer).frames.

        Стрелочку (->) пишут крестовики.
        Ответить
        • новый символ нужно ввести (->) - "крестоблядская стрелка"
          Ответить
    • Point** pnts[] = {&btlv, &btlt, &btrt, ...}
      
      for(size_t i = 0; i < sizeof(pnts) / sizeof(pnts[0]); i++)
         *pnts[i] =(Point*)calloc(layer->frames.size(),sizeof(Point));
      Ответить
    • либо это не плюсы, либо можно через new
      Ответить
    • показать все, что скрытоvanished
      Ответить

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