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

    +100

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    #include <iostream>
    int main(void)
    {
      for (int i=0;i<600000000;i++)
      cout<<"Ten minuters";
    //IT Works!
    }

    Реальный код с cyberforum. Задание звучало как "Написать таймер, каждые 10 минут выводящий какое-нибудь сообщение". Один умник написал такое нечто, от чего я просто впал в ступор.

    Запостил: darkcheg, 02 Февраля 2010

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

    • Эм, так тут постоянно будет выводиться строка. Надо
      #include <iostream>
      int main(void)
      {
        for (int i=0; 1 ;i++)
        if(i==600000000){
          cout<<"Ten minuters";
          i = 0;
        }
      //IT Works!
      }
      Ответить
      • сообщение выведется 1 раз...
        Ответить
        • откуда такие выводы ?
          Ответить
          • i = 0; заметил только после "Отправить комментарий"
            Ответить
            • на самом деле код будет работать и без обнуления i
              Ответить
              • оО
                i == 600000000 встретится больше одного раза?
                Ответить
              • Угу, только с неправильной периодичностью.
                Ответить
                • неужели в таком наиговнокоднейшем говнокоде важна какая-то там периодичность ?
                  Ответить
    • Читай комментарий.
      Ответить
    • показать все, что скрытоГде тут C?
      Ответить
    • а этот умник хотя бы попытался сам его запустить?
      Ответить
    • В школе на QBasic так учили делать. Надеюсь, что «умник» пока просто школьник.
      Ответить
    • Может я криворукое создание, но разве 1 шаг итерации будет соответствовать 1 микросекунде? 1 команда на ассемблере - да, а на сях в цикле ФОР - сомневаюсь... З.Ы: у нас и студентов учат так, что код был бы написан ещё покруче. ЗЫ2: #include <iostream.h>
      Ответить
      • ну ты и слоупок))
        объясняю на пальцах - сей ресурс предназначен для сбора говнокода всех сортов, следовательно большинство постов даже воспринимать всерьез не стоит
        Ответить
    • for ( int i = 0; i < 600000000 ; i++ )

      - здесь
      i
      выходит за границы типа
      int
      .
      Бди, guest!
      Ответить
    • Комментарий от кэпа. Здесь i может как выходить, так и не выходить за границы типа, в зависимости от реализации компилятора и машины на которой он должен выполняться. Но код - говно.
      Ответить
      • Покажите, покажите мне реализацию компилятора и машины, где инт выйдет за границы типа.
        Кэп, обновитесь!
        Ответить
        • На вскидку, gcc для AVR8, например, там инт можно 8-ми битным сделать http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/AVR-Options.html#AVR-Options. Вы конечно сейчас скажете что AVR8 унылое говно и ее нельзя назвать машиной, но тем не менее пример я привел.
          Ответить
          • Добавка: а без опции -mint8 там 16-ти битный int
            Ответить
          • Не, в 8 бит не поверю, это извращение, а в 16 да, стандарт предписывает INT_MAX не меньше 32767. (Хоть я и не видел 16-битный инт)
            Но все равно туше!

            PS. А вообще это не может выйти за границы типа, потому что его обрежут и он все равно будет внутри области значений типа. Бе-бе-бе!:)
            Ответить
            • :) Вы не поверите! (Но тем не менее это так, хотя 8-ми битный инт это нестандартно. Естественно счетчик не сможет быть больше чем INT_MAX, видимо поэтому компилятор говорит мне что результат сравнения всегда истина)
              Ответить
    • cout << какбе намекае, что это кресты, а не Си =)
      Ответить
    • показать все, что скрытоvanished
      Ответить

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