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

0

  1. 1
(&goodsBuff[k].name==&vmass[p].name)

Сравнение строк

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

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

  • здесь более говниста строка mass в идентификаторе (который массив - К.О.)
    Ответить
  • Петросяны 🙂
    VM - Ass!
    По говнокоду: смеяться надо в условии, в том, что нету strcmp?
    Ответить
  • так трогательно, когда школьники называют переменные "massiv", "schetchik" итд.
    я сам так делал в 98м
    Ответить
  • До очевидного варианта - `vmass` обозначает "vertical mass" (вертикальная масса) - почему-то никто до сих пор не додумался. Любой мало-мальски образованный в области физики человек видя идентификатор `vmass` сразу думает о вертикальной массе 🙂
    Ответить
    • массу-то там видно, но масса - скаляр, вы случайно с весом не путаете?
      Ответить
        • схуяли ? P = mg. g - ускорение свободного падения, вектор направленный к центру Земли.
          Что в школе по физике было ? 🙂
          Ответить
        • Вес - это сила ("... с которой тело действует на опору или подвес"). Сила - вектор.
          Ответить
    • Скажите, мало-мальски образованный в области физики человек, это где же это вы видели такой абсурдный термин "вертикальная масса" ?=)
      Ответить
      • вам срочно нужно приобрести детектор сарказма. он кстати с большой точностью измеряет массы. и вертикальную в том числе.
        Ответить
        • Ок, на говнокоде нужен смайлик с табличкой "Sarcasm".

          Хотя какая разница, все равно смысл комментов в том, чтобы разводить споры и холивары.
          Ответить
  • Интересно, а откуда ноги растут у такого кода? Если `name` - указатели или массивы, то типический чайник как правило реализует сравнение как `goodsBuff[k].name == vmass[p].name`, без использования оператора `&`. Код, разумеется, успешно компилируется и чайник до поры до времени не замечает подвоха.

    А здесь мы наблюдаем дополнительное использование оператора `&`. Зачем? Среднестатистический чайник до такого бы просто не додумался.

    В Си коде такое может быть оправдано, если каким-то образом массивы `goodsBuff[]` и `vmass[]` перекрываются (это могут быть указатели в один и тот же массив) и автор просто хотел отловить возможный факт того, что `goodsBuff[k].name` и `vmass[p].name` - один и тот же объект. (В С++ коде возмрожна еще попытка проверки того, что ссылки `name` указывают на один и тот же объект).
    Ответить
    • Всё о чём вы здесь говорите относительно оправдания кода, я, более чем уверен, в голову автора не попадало вообще. & для массива опускается компиляторами (не знаю на счет всех, но в некоторых точно). А зачем присутствует в коде? Да потому что это крутой значок 🙂
      Ответить
      • найди мне компилятор, который будет вылетать на ассерте
        {
        char p[16];
        assert(&p[0] == p);
        }
        Ответить
      • "& для массива опускается компиляторами" - откуда это? Оператор `&`, будучи примененным к массиву, компиляторами никогда не опускается. Результат такого `&` численно будет совпадать с адресом первого элемента массива, но тип этого результата будет "указатель на массив", а не "указатель на элемент". Т.е. эффект оператора `&`, примененного к массиву, существует, но существует он только на уровне понятий языка ("тип указателя") и в сгенерированном машинном коде сам по себе не отражается. (Это, наверное, можно ошибочно принять за опускание).
        Ответить
        • Про тип согласен. Но в ГК же не типы сравниваются, а значения. С другой стороны - код-то сишный. Как в Си тип проверять будете?
          Ответить

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

Переведи на "PHP", guest!

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


    8