Кресты / Говнокод #4427 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
#define loopv(v)    for(int i = 0; i<(v).length(); i++)
#define loopvj(v)   for(int j = 0; j<(v).length(); j++)
#define loopvk(v)   for(int k = 0; k<(v).length(); k++)
#define loopvrev(v) for(int i = (v).length()-1; i>=0; i--)

Может я чего недопонимаю?
Это из Cube 2: Sauerbraten

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

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

  • ИМХО имеет смысл только первый и последний.
    Остальные, возможно, временный костыль, который забыли выпилить.
    Ответить
    • чем сложно вписать человеческие циклы в коде и не плодить невесть что?
      Ответить
      • Может, хотели абстрагироваться от способа хранения?
        Например, если реализовать в виде списка, то меняется одна строка на что-то вроде:
        for(list_elem* i=v; i; i=i->next)
        Ответить
        • смешно же, городить костыли вместо того чтобы сразу взять язык с соответствующим рангом полиморфизма
          Ответить
          • Ну, мало ли. Может, начальство не дает брать другой язык (как у нас). И вообще, чего мы хотим от игры с таким названием!
            Ответить
            • Cube 2 — где там начальство?
              зато макросов там море, некоторые решают задачу через «жпоа»
              например генерируется уникальное имя для функции некоторой команды в скриптовом языке при помощи номера строки вызова макроса. Следовательно в разных файлах нельзя объявлять эти самые команды.
              Сам не шибко силен в с++, но там выстроена иерархия структур с функциями внутрях (отчего не классы — может так и лучше, не знаю).
              И еще много разного, от чего я думаю что я точно идиот.
              Ответить
              • Ну, инвесторы, или кто там кроме начальства:) Лиды.

                Это надо у них спросить, чего они извращаются. Может, и объяснят!
                Ответить
          • идея в теории хороша, но не все шарят в итераторах, в том смысле, что в комманде должна быть небольшая дисперсия по знаниям, иначе кирдык
            Ответить
            • Значит надо сделать несколько команд. А то получается что стадо бежит со скоростью самого медленного.
              Ответить
  • Использование #define там где без него можно обойтись - злейшее зло.
    Ответить
    • Вообще, препроцессор Си не самая приятная вещь. 🙁
      Ответить
        • Не спорю. Однако, использовать его надо аккуратно и осмотрительно, а не то может получиться не слишком красиво. Да и не о дефайнах я мысль вёл, а больше об инклудах.
          Ответить
  • Во, вопрос назрел!
    Стоит ли это конкретно выправить, написать комментарий, что так делать нельзя и отправить кто там поддержкой всего этого занимается в виде патча?
    Ответить
    • хз. еще неплохо было бы переименовать length() в size() ибо все должно быть похоже на STL
      Ответить
      • тото же, вряд ли примут, ведь уже кучу говномодиков наклепали и прочая дребедень.
        Ответить
  • Исключение из непосредственного текста прогарммы тривиальной логики итерирования - это весьма полезная вещь, и к ней старательно стремятся во всех процедурных языках программирования, включая и С и С++. В С++ механизм шаблонов позовляет получить неплохие результаты. В С (или в С++ при неиспользовании шаблонов) с этим сложнее.

    Именно этого пывтались достичь авторы вышепроцитированных макросов. Идея - хорошая и похвальная. Реализация - говнокодовая. Есть такой стиль говнокодирования, когда самый верхний целочисленый цикл - всегда по `i`, вложенный в него - по `j`, а в него - по `k`. Причем независимо от того, по чему именно ведется итерирование. Вот под такой стиль организации циклов и заточены вышеприведенные макросы.
    Ответить
  • вы таки нихуя не шагите: есть такая рассово французкая либа CImg, таки матана вам тоже не понять, для чего она была создана, но в ней таки есть кодт и похуже, и не говно, а вы кушайте, кушайте:
    #define cimg_for_out1(boundi,i0,i1,i) \
     for (int i = (int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); ++i, i = i==(int)(i0)?(int)(i1)+1:i)

    и многа, многа такога... лососнули тунцов?
    Ответить
  • define - неисчерпаемый источник говна. просто золотая жила
    так возблагодарим же Кернигана с Ричи за такой подарок говнокоду.
    Ответить

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

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

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


    8