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

0

  1. 1
SleepMsec( 3600 * 1024 );

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

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

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

  • пользователь думает что в килобайте 1000 байт, а программист - что в километре 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) тоже не нарушает синтаксис Паскаля, но в дельфи, будучи применённой к строке, создаст утечку памяти.
            Ответить
            • Нет, тут виноват именно Паскаль, ибо тут применяется именно паскальная функция, вместе со всем этим ужасным паскальным синтаксисом. В Си такой функции нету, есть другие, более безопасные. ©
              Ответить
                • (S.c_str - 8)*++
                  На Си такое пишется намного короче и так можно сделать случайно, при неосторожном обращении с указателями.
                  Ответить
                      • >Самое прямое отношение к C++, вообще-то.
                        >к C++
                        А мы сейчас о другом языке говорим, вообще-то.
                        Ответить
                          • Разыменование (звёздочка) ставится перед выражение, т.е. наверное ты имеешь ввиду *(S-8)++ ?
                            Ответить
                            • Да в этом Си всё не так, даже звёздочка не с той стороны!
                              Ответить
                              • Вариантов немного: либо звезды в коде, либо на погонах ...
                                Ответить
                              • А теперь сюрприз! Чтобы это извращение заработало нужно поставить дополнительные скобочки
                                Ответить
              • Да, но чтобы так написать, надо специально совершить извращение! Случайно изнасиловать счётчик ссылок не получится.
                Ответить
    • есть предположение, что из-за того, что надо больше писать чем в си.
      ===
      Вообще скажу такую вещь. Есть у нас на работе один проект, в код смотреть страшно, однако он давно работает и несколько раз его дорабатывали.

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

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

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


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

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

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

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

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

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

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

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

Помни, guest, за тобой могут следить!

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


    8