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

    +173

    1. 1
    #define arrVec[2].realVectorInfo.Count 5

    Мало того, что встретил это в проекте, доставшемся от "предков", так ведь и MSVS 6.0 проглатывает.
    Выражение arrVec[2].realVectorInfo.Count успешно заменялось на 5.
    Заметил подставу после появления строки arrVec[i].realVectorInfo.Count в проекте, в результате рефакторинга.

    Запостил: Говногость, 20 Декабря 2010

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

    • Одни эмоции. Говорил же я, что macros are evil! В Паскале такой глупости нет.
      Вот только C++ не смог найти. В Си это не скомпилируется?
      Ответить
      • MS VS 2008 не компилирует.
        Ответить
        • Это и не предназначено для компилятора. Директивы для препроцессора.
          Ответить
          • Он, наверное, имел ввиду, что это выдаёт ошибку или предупреждения во время компиляции.
            Ответить
      • #define TRUE FALSE не?
        Ответить
        • да-да, "счастливой отладки, суки!"
          Ответить
        • Это не так утяжеляет отладку, как строки из говнокода.
          Только ламеры делают проверки:
          if(expression==TRUE)
          Ответить
        • это еще цветочки. история http://ithappens.ru/story/1383 веселее будет
          Ответить
    • Мне кажется, или тут есть какое то скрытое говно?
      Ответить
      • Попробую поработать капитаном, потом скажете, получилось у меня или нет.

        Препроцессор, увидев где-нибудь заклинание arrVec[2].realVectorInfo.Count, тут же поторопится его заменить на 5, даже если оно встретится в левой части оператора присвоения (о, ужас!). Самое коварное, что в правой части нет скобок, поэтому последствия непредсказуемы.

        Если же в программе будет arrVec[i].realVectorInfo.Count, то даже в случае i равного 2 подстановка не выполнится. Отладчика ждёт палата №6.
        Ответить
        • Вполне, только
          > Отладчика ждёт палата №6.
          Кэп должен был без метафор описать, что произойдёт.
          Ответить
    • >> realVectorInfo
      А власти скрывают!.. Не засну теперь.
      Ответить
    • Может VS 6.0 не соответствует стандарту?
      Ответить
    • А ведь никто и не заметил!
      Злободневность говнокода всем затманила глаза...
      С++ то нет! ^_^
      Ответить
      • Конечно, нехорошо показывать пальцем, особенно на самого себя, но придётся нарушить это правило. Смотрите САМЫЙ первый комментарий к говнокоду.
        Ответить
    • Дрочите на меня ежечасно!
      Ответить

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