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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
switch (options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE))
  {
  case 0:
  case PCRE_BSR_ANYCRLF:
  case PCRE_BSR_UNICODE:
  break;
  default: errorcode = ERR56; goto PCRE_EARLY_ERROR_RETURN;
  }

Выкидываем три варианта, обрабатываем один.

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

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

  • Логика автора:
    1. 0 - похуй
    2. PCRE_BSR_ANYCRLF - похуй
    3. PCRE_BSR_UNICODE - похуй
    4. errorcode = ERR56 - йоба!
    Ответить
  • > Выкидываем три варианта, обрабатываем один.

    По-моему наоборот, идём дальше по 3 вариантам и вылетаем на PCRE_BSR_ANYCRLF & PCRE_BSR_UNICODE, хотя нафиг тогда свитч.
    Ответить
    • есть народ который предпочитает писать так вместо простого if.

      и если перепесать на if, то будет нужно доп переменная (что бы три раза значение не вычислять). может потому что не хотели еще одну временную переменную вводить вот так и написали.
      Ответить
      • Зачем переменная?

        if options | PCRE_BSR_ANYCRLF | PCRE_BSR_UNICODE = options then ... error ...
        Ответить
        • проверка проверяет что только один из флагов установлен, либо они не установлены вообще. поэтому if'ом это как минимум три проверки на `(options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE))`: `== 0`, `== PCRE_BSR_ANYCRLF` и `== PCRE_BSR_UNICODE`. поэтому, либо три раза копипаст, либо временная перемення.
          Ответить
          • Да, но если один или ни одного он же ничего не делает. break - и идет дальше. Поэтому эти проверки можно собсно и вообще выкинуть.
            Ответить
            • > Да, но если один или ни одного он же ничего не делает.

              пойдите, выпейте кофе - вы еще видно не проснулись.

              Естественно что код *что то* делает в этом случае, а именно *не* обламывается по ошибке.
              Ответить
              • Еще раз.
                Если ни одного флага - идем в свич, на первом case выходим из свича идем дальше. Ничего не произошло.
                Если один флаг - идем в свич, на втором-третьем case выходим. Ничего не произошло.
                Если два флага - идем в свич, на третьем case вываливаемся в ошибку.

                Вот и предлагаю if (условие третьего case) --> ошибка
                Ответить
      • Эм. Оно всегда равно нулю. Это же две битовых константы.
        Ответить
    • Си - это же такой переносимый ассемблер. Ассемблер без переходов - не ассемблер. Не?
      Ответить
      • к Си у меня претензий нет, автора вина, что у него ветви логики такие длинные и запутанные.
        Ответить
        • как по мне, умеренное и осмысленное применение goto лучше чем кучи вложеных if'ов/етц.
          Ответить
          • не одними ифами... есть много средств, что бы держать код в чистоте и ясности
            Ответить
            • ты хочешь сказать что if'ами/while'ами/етц невозможно сделать запутанный и нечитабельный код?

              я конечно избалован работой с некоторыми крутыми опенсорсными проектами, но я видел кучи уродливого (коммерческого) кода без goto - и кучи читабельного читабельного (open source, cue: linux kernel) кода с goto. я естественно предпочитаю последнее.
              Ответить
  • это "рога" после реинженеринга остались? уж больно уродливо выглядит.
    Ответить
  • ХEDJAEHQXLYASIZBZGMBAEHQGUIVVUZALIMSIIDRCLUVVVACDXOBMHNNJNZTXQMNPYIWATBHDZTNXDQRIOQFRRHQTJZVHSEHMCAQZNRYRZKMBOWDABPTOCFATCSNFFLGHQKSKGZJZFRMTMGMYRRDPINDBWVRUZLPOKLKGTQWCLPTIIJTXRMDHVX
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8