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

    +120

    1. 1
    SleepMsec( 3600 * 1024 );

    Это вынесло мне моск

    Запостил: stillwaiting, 06 Декабря 2010

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

    • Кибибайт!
      Ответить
    • SleepMsec(log(pow(2010,12) - 6));
      Ответить
    • lol
      Ответить
    • А можно было как в http://govnokod.ru/4560 через цикл.
      Ответить
    • Это же двоичный час.
      Ответить
    • Да это же 1,024 часа!
      Ответить
      • Считайте лучше.
        Ответить
      • KimH... Кибимилличас.
        Ответить
      • Моя вина. Это действительно 1,024 часа. Меня переглючило, что Вы запятой отделили тысячный разряд.
        Ответить
        • Написание действительно двоякое. Есть смысл поставить ударение в слове "часа"
          Ответить
    • пользователь думает что в килобайте 1000 байт, а программист - что в километре 1024 метра
      -- русский народный боян
      Ответить
      • А я думаю, что в Останкинской телебашне 10 рулонов туалетной бумаги.
        Ответить
        • Интересно, бывают ли extended play рулоны
          Ответить
          • Бывают. Видел 56 метров. Даже 57 метров видел.
            Ответить
          • Пользуйтесь бумажными полотенцами. Может быть и не extended, но expanded точно.
            Ответить
    • Это не тру. Вот тру: 1<<22.
      Ответить
    • показать все, что скрытоК КибиМилисекундам предлагаю сокращение такое: MiS. Или miS
      Ответить
    • да, аффтар отжег.
      по крайней мере шутка безобидная (точность не критична если)
      Ответить
    • Мне этот говнокод сегодня во сне приснился. Что я не смогу проснуться из-за расхождения времени.
      Ответить
    • SleepMsec - ..Msec - Mega Secund?
      Ответить
    • Ohne dich zähl ich KiStunden, ohne dich.
      Mit dir stehen miSekunden, lohnen nicht.
      Ответить
    • показать все, что скрытоНа самом деле такой говнокод ещё раз показывает опасность и ненадёжность языка Си. На Паскале такой говнокод написать нельзя, то есть, конечно, можно, но только сознательно. Паскаль намного безопаснее, непонятно, почему не он стал стандартом.
      Ответить
      • На паскале нельзя умножать на 1024 или что?
        Ответить
        • Конечно можно, но для этого надо так прямо и написать. А на Си возможности сделать баги раскиданы везде, где можно, что и показывает данный пример.
          Ответить
          • Я всегда защищал Паскаль, но данный пример языконезависим. Такое говно можно сделать на любом языке, хоть на Брэйнфаке, так что Ваши аргументы неубедительны.
            Надо отделять алгоритм от собственно программирования.
            Вот если бы здесь были дефайны сишного препроцессора, я бы сказал, что Си — говно, потому что не умеет определять констант.
            Ответить
          • А по-моему эта строка не нарушает синтаксиса паскаля :)
            Ответить
            • О чём я и говорю. Если описать функцию SleepMsec в Паскале, то эта строка скомпилируется.

              Другое дело, что в тру-Си строка скомпилируется, даже если функция не описана. Вот будет прикол, если прилинковать библиотеку, в которой аргумент функции имеет размер, отличный от int. Что тогда будет со стеком!
              Ответить
              • И что же будет со стеком?
                Ответить
                • Пример №1. Функция принимает 16 бит, а вызывающий код кладёт 64. Результат: что-нибудь затрём.
                  Пример № 2. Функция принимает 64 бита, а вызывающий код кладёт 16. Результат: в части битов мусор.
                  Ответить
                  • Пример №1 ничего не затрём
                    Пример № 2 да, будет мусор
                    Но стек не будет испорчен, и мы плюхнемся назад по адресу возврата
                    Ответить
              • Если в паскале описать функцию, переводящую процесс в режим ядра и пишущую в нулевой адрес, то программа тоже скомпилируется. Но на Си это можно сделать случайно, а на Паскале - нет.
                Ответить
              • >>Другое дело, что в тру-Си строка скомпилируется, даже если функция не описана.
                ваще-то вылетает варнинг, если прототипа не найдено в хедере.
                Вы знаете другой способ реализации модульности?

                даже в моей любимой жабе, где вместо заголовков прототипы берутся прямо из файлов с реализацией, даже в ней можно собраться с одним жаром, а запустится с другим, и словить runtime exception.
                Ответить
                • И всё-таки в жабе есть модульность, а в Си — костыль.
                  Ответить
                  • в сях отличная модульность для процедурного подхода
                    есть модули, есть приватные (статические) методы
                    есть позднее связывание

                    что не так?
                    Ответить
                    • #define не так. MACROS ARE EVIL!!1!11!

                      А ещё Watcom C, например, умеет добавлять в обжи комментарии, что требуется прилинковать такие-то модули и такие-то библиотеки, на основании директив. Почти как uses в модульных языках, но это, увы, не является стандартом.
                      Ответить
            • Строка inc(pint(integer(@S[1]) - 8)^, 9999) тоже не нарушает синтаксис Паскаля, но в дельфи, будучи применённой к строке, создаст утечку памяти.
              Ответить
              • Нет, тут виноват именно Паскаль, ибо тут применяется именно паскальная функция, вместе со всем этим ужасным паскальным синтаксисом. В Си такой функции нету, есть другие, более безопасные. ©
                Ответить
                • (*int)(*((int)(&S[1]) - 8))++
                  Ответить
                  • Ох щи ::sarcastic::
                    Ответить
                  • (S.c_str - 8)*++
                    На Си такое пишется намного короче и так можно сделать случайно, при неосторожном обращении с указателями.
                    Ответить
                    • S.c_str - Это уже с++ и к си отношения не имеет
                      Ответить
                      • Самое прямое отношение к C++, вообще-то.
                        Ответить
                        • >Самое прямое отношение к C++, вообще-то.
                          >к C++
                          А мы сейчас о другом языке говорим, вообще-то.
                          Ответить
                          • На Си это будет ещё короче: (S-8)*++
                            Ответить
                            • Разыменование (звёздочка) ставится перед выражение, т.е. наверное ты имеешь ввиду *(S-8)++ ?
                              Ответить
                              • Да в этом Си всё не так, даже звёздочка не с той стороны!
                                Ответить
                                • Вариантов немного: либо звезды в коде, либо на погонах ...
                                  Ответить
                                • А теперь сюрприз! Чтобы это извращение заработало нужно поставить дополнительные скобочки
                                  Ответить
                                • Программирования язык Forth нужен тебе, юный падаван
                                  Ответить
                • Да, но чтобы так написать, надо специально совершить извращение! Случайно изнасиловать счётчик ссылок не получится.
                  Ответить
      • есть предположение, что из-за того, что надо больше писать чем в си.
        ===
        Вообще скажу такую вещь. Есть у нас на работе один проект, в код смотреть страшно, однако он давно работает и несколько раз его дорабатывали.

        Другой проект я написал. Ну старался без говнокода. Объекты там, они не знают друг о друге, и т.д. Лёгко поддерживать такой код.
        Так блин этот проект, который раз уже запустить не можем: вечно какие-то препоны: оказывается то то надо добавить, то это, то он должен работать так-то. (тз в режиме перманентной доработки)

        Так похоже и с Паскалём, и с Си. Один язык хорошо продуман, но не популярен, другой более подвержен ошибкам программистов, но популярен.

        Такое ощущение, что то, что быстро ночью на коленке делают, становится популярным.
        а то, что долго продумывают чаще всего фэйлится.


        Из истории говнокода.ру: "Идея создать проект родилась внезапно и так же внезапно была воплощена в жизнь!" (выделено мной)(http://habrahabr.ru/blogs/i_am_advertising/66701/)

        Тот же BASIC был сделан Биллом Гейтсом и Алленом Полом за 2 недели.
        Фэйсбук — за две недели.
        Ответить
        • Это не только к программированию относится. Это общая закономерность.
          Ответить
          • >Это общая закономерность.
            не совсем. до закономерности это не дотягивает.
            а в кино так и совсем все наоборот.

            мне кажется синтаксис Си популярен из-за большего минимализма и гибкости.

            >то, что долго продумывают чаще всего фэйлится.
            нет. как раз наоборот - если идею носить в голове, то когда она хорошо созревает - дает хорошие плоды.
            Ответить
    • А что если :
      SleepMsecEx( 3600 * 1024 * 3.14 );
      для учета длины окружности циферблата ?
      Ответить
    • 3600 = 0xe10 ≈ 0xe00 = 3584;
      SleepMsec( 3584 * 1024 );
      Ответить
      • на мой взгяд говно уже в том что умножаем не сдвигом, а умножением.

        SleepMsec( 3515 << 10);
        покошегнее будет

        >Не пугайтесь, это я тестировал говноверсию букмарклета зла.
        ИТТ я тебя плюсану

        >На самом деле такой говнокод ещё раз показывает опасность и ненадёжность языка Си.
        фимозненько
        Ответить
        • тфой фзгляд жалкий.. жывотное
          Ответить
        • Говонокод в данном случае использовать сдвиг. Ни к чему путать код ради микрооптимизации, которая к тому же будет сделана компилятором лучше, чем вручную
          Ответить
    • Не пугайтесь, это я тестировал говноверсию букмарклета зла. Всем спасибо.
      Ответить
      • То-то я и думаю, что тут за зло инфернальное проснулось. Уже хотел омичем обозвать.
        Можно было тред поменьше попользовать.
        Ответить
        • А я протестировал букмарклет добра:
          javascript:void($('a.comment-vote-on').each(function(){comments.vote($(this))}))
          Теперь bugmenot заминусует меня за нарушение авторских прав.
          Ответить
          • стоимость годовой подписки -- всего одно бросание Дж. Резига в сортир. исходник вы получаете в подарок!
            Ответить
            • В смысле исходник? Джон Резиг до макания в сортир?
              Ответить
              • Джон Резиг проваливается куда-то, откуда несёт страшной вонью.
                Ответить
    • Между прочем в зависимости от того как закоден SleepMsec, вполне возможно он спит в 1/1024 секунда а не в миллисекундах
      Ответить

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