1. Си / Говнокод #13690

    +133

    1. 1
    hq->rd_period = (i = hq->rd_period+1) != 0 ? i : 1;

    что именно хотел сказать автор, неизвестно. предполагаю что `while (!++hq->rd_period);`

    Запостил: Dummy00001, 28 Августа 2013

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

    • А дальше юзаются и i и rd_period?
      Ответить
      • Будет очень странно если нет) Иммитация пустого цикла)
        Ответить
      • только rd_period.
        Ответить
        • ++hq->rd_period;
          if (!hq->rd_period)
              hq->rd_period = 1;
          Интересно, зачем он избавляется от нуля?
          Ответить
          • в данном случае, хез. на ноль в коде нигде не проверяется. с числом вообще ничего не делается, оно только в выходящие сообщения пишется (рядом с настоящим sequence number, который может быть нулем).

            типичное случай скипания нуля это sequence numbers в сетевых сообщениях. во многих системах нулевой номер имеет спец значение (например вне сессии, out-of-bound, seqno reset, etc). от туда-то я и знаю трюк с while'ом.
            Ответить
            • >трюк с while'ом
              Ну и нафига нужны эти трюки? Такое же гавно как и исходный код, если не хуже. Такое ощущение, что С-программистам не платят за строчки, а наоборот дают каждый месяц лимит строк и как хочешь, так и укладывайся в него.
              Ответить
              • трюк с while'ом это стандартная парадигма увеличения счетчика с перепрыгиванием через ноль в сетевых приблудах. сетевики знают эту парадигму. ГК слишком излишен и там надо остановится и задуматся что и почему.

                вариант который bormand пытался написать, тоже используется, но типично пишется так:
                seqno++;
                if (!seqno) seqno++;


                с парадигмами прикладных областей бесполезно спорить. они просто есть. (и да, они часто есть говно.)
                Ответить

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