Школоло / Говнокод #5668 Ссылка на оригинал

0

  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 StriderMan, (Updated )

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

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

      proc(
        1
      {$IFDEF TARASB_STYLE}
        , 2
      {$ENDIF}
        , 3
      )
      Ответить
      • Не решается.
        А если наличие первого аргумента тоже зависит от условий компиляции?
        Ответить
          • Ну вот, а когда мне понадобилось задать так перичислимый тип, мне пришлось для него придумывать пустое значение, просто чтобы что-то было после запятой.
            Ответить
            • Приведите пример, где этот "говнокод" полезен. Не пойму что-то...
              Ответить
          • Нет.
            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).
              Ответить
  • Недавно (буквально месяц назад) в Питон такую штуку включили.
    Ответить
      • Почему говнокодеры? Так удобнее комментировать необязательные параметры. К тому же это согласуется с другими местами, где возможна запятая после последнего элемента -- в кортежах, списках, словарях и множествах.
        Ответить
  • ну, в джаве давно так разрешается обьявлять массивы. Что бы не заблудиться в трех запятых
    Ответить
  • в джаваскрипте тоже можно так писать, в json-ах
    Ответить

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

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

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


    8