1. Pascal / Говнокод #5668

    +107

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    procedure proc(a, b: integer);
    begin
    end;
    
    proc(1, 2,); // лишняя запятая после 2  !!!!11

    на Delphi7 компилится и работает!!! Я в шокенах, 8 лет на Делфи и не знал...

    Запостил: StriderMan, 14 Февраля 2011

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

    • специально для копипастунов сделано
      Ответить
    • А чё, удобно.
      Особенно, когда условными компиляциями обмазываешь и функция в зависимости от условий принимает разные параметры.
      Ответить
      • дык это решается расстановкой запятых ПЕРЕД аргументами

        proc(
          1
        {$IFDEF TARASB_STYLE}
          , 2
        {$ENDIF}
          , 3
        )
        Ответить
        • Не решается.
          А если наличие первого аргумента тоже зависит от условий компиляции?
          Ответить
          • хм.... согласен
            Ответить
            • Ну вот, а когда мне понадобилось задать так перичислимый тип, мне пришлось для него придумывать пустое значение, просто чтобы что-то было после запятой.
              Ответить
              • Приведите пример, где этот "говнокод" полезен. Не пойму что-то...
                Ответить
          • {$IFDEF TARASB_STYLE}
            proc(1, 2, 3);
            {$ELSE}
            proc(3);
            {$ENDIF}
            Не? :)
            Ответить
            • Тарас не одобряет
              Ответить
            • Нет.
              TDevice = (
                  {$IFDEF  TS} dETR,                   {$ENDIF}
                  {$IFDEF TSN} dTS_NSH,                {$ENDIF}
                  {$IFDEF  TS} dTS_IND,                {$ENDIF}
                  {$IFDEF TPN} dTP_NSH,                {$ENDIF}
                  {$IFDEF  TP} dTPO1, dTPO23, dTP_IND, {$ENDIF}
                dEMPTY);

              Программа может компилироваться в несколько разных комплектаций.
              Ответить
      • а вот на си так не написать

        глючный этот ваш паскаль
        понятно теперь, почему никто на нем пишет
        Ответить
        • Причём тут глюки? У тебя глюки!
          Ответить
          • видимо при том, что и в ранних версиях и в поздних версиях этого бага не было.
            вот proc(1, 2,,); - уже не компилируется.
            Ответить
            • Почему это баг?
              Ответить
              • >Почему это баг?
                Что полезного этот "баг" позволяет делать? Приведите, наконец, пример.
                Ответить
                • Корневое сообщение ветки, лол.
                  Ответить
                  • proc(
                      1
                    {$IFDEF TARASB_STYLE}
                      , 2
                    {$ENDIF}
                      , 3
                    )

                    Как этот пример связан с возможностью дельфи писать лишнюю запятую? Поясните, о великий гений паскаля.
                    Ответить
              • это баг, т.к.:
                1) в ранних и посздних версиях этого нет
                2) не позволяется proc(1, 2,,); - почему для 2-х параметров нельзя то, что можно для одного?
                3) это не связано с порядком передачей параметров - проверил cdecl, register, stdcall, safecall, pascal.
                Был бы баг не багом - в новых версиях оно бы осталось как "недокументированная фича".
                Ответить
                • 1. Ничего не значит
                  2. Лол, ты зачем 2 запятые поставил? С 1 компилится.
                  3. И с фазами Луны тоже не связано. Ужасный баг, да.
                  Ответить
                  • 1. ню-ню
                    2. ну вдруг надо извратно дефайны расставить - раз уж мы говорим о них.
                    в любом случае ни у кого нет доказательств своей правоты о происхождении этого эффекта и каждый останется при своем мнении.
                    Ответить
                    • Двойная запятая не нужна для расстановки дефайнов, лол.
                      Короче, ты из жопы какую-то претензию вытащил и типа новый баг в Дельфи нашёл.
                      Ответить
                • 2. лишняя запятая не означает третий безымянный бестипный параметр. просто ее можно поставить после последнего параметра JFL
                  Ответить
                  • Всё, теперь я понял, откуда он претензию вытащил.
                    Ответить
                    • Ровным счётом ничего не даёт. Можно написать:
                      proc(1,2), а можно proc(1,2,) и это будут всё те же 2 параметра.
                      Типичный глюк.
                      Ответить
                      • Это удобная фича.
                        Ответить
                        • >Это удобная фича.
                          Чем же она так удобна?
                          Можно написать лишнюю запятую?
                          Для индусов это удобно. Можно писать так:
                          proc
                          (
                          1
                          ,
                          2
                          ,
                          )
                          ;
                          сразу лишняя строка появляется в коде => +1 к зарплате.
                          Ответить
                          • > Чем же она так удобна?

                            Читай мой ответ на этот вопрос.
                            Ответить
                            • 'с вашими удобствами из паскаля получится',
                              'какой-то',
                              'сраный',
                              'скрипт',
                              );
                              Ответить
        • >а вот на си так не написать
          На C++ можно так по стандарту:
          void f(int p, bool pp ...)
          {

          Многоточие - не опечатка. Где-то тут на говнокоде пример такого кода выкладывали. Может в Си так тоже можно.
          Ответить
          • Этого Стандарта ещё нет.
            Ответить
            • Нет. Работает на майкрософстких компиляторах и я не знаю зачем... По моему и на гцц работает...

              Вообще, попробуйте, если интересно.
              Ответить
              • Ну так реализовывают фичи потихоньку. И ещё долго после утверждения C++2011 будут догонять (если вспомнить опыт VC++ 6.0).
                Ответить
          • запятую забыл:)

            void f(int p, bool pp, ...)
            Ответить
    • Недавно (буквально месяц назад) в Питон такую штуку включили.
      Ответить
      • говнокодеры попросили? ;)
        Ответить
        • да, питон уже не тот
          Ответить
        • Почему говнокодеры? Так удобнее комментировать необязательные параметры. К тому же это согласуется с другими местами, где возможна запятая после последнего элемента -- в кортежах, списках, словарях и множествах.
          Ответить
    • ну, в джаве давно так разрешается обьявлять массивы. Что бы не заблудиться в трех запятых
      Ответить
    • в джаваскрипте тоже можно так писать, в json-ах
      Ответить

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