1. C++ / Говнокод #17002

    +144

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    while (1) { // Не все знают логические значения
        ...
    }
    
    for (;;) // Ещё хуже
    { ... }

    Запостил: nns2009, 31 Октября 2014

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

    • Боярский!
      Ответить
    • Правильный вариант:
      loop:
          // ...
          goto loop;
      Ответить
      • хвостовая рекурсия же!
        int main(void)
        {
        //...
        return main();
        }
        Ответить
        • Без оптимизации упадёт. А с оптимизацией будет то, что показал Борманд.
          Ответить
          • Ну так while и for тоже будут как показал борманд. Речь же о внешнем виде.
            Ответить
          • А в итоге - во всех вариантах будет то, что показал Pythoner ниже.
            Ответить
        • в класическом варианте: exit(main());
          Ответить
        • С pedantic-error собери это вначале.
          Ответить
        • В g++ не скомпилится - явный вызов main запрещён...
          Ответить
          • У меня все работает.
            http://ideone.com/hhUPzR
            Ответить
            • Поставь адекватные настройки:
              http://coliru.stacked-crooked.com/a/560afb1304130f2c

              И вообще, почему нужно давать какие-то параметры чтобы компилятор стал соответствовать стандарту или выдавать ворнинги? По-хорошему все эти -Wall -Wextra -pedantic-errors должны быть по умолчанию и требовать отдельных ключей чтобы это всё ОТКЛЮЧИТЬ
              Ответить
              • Нет уж, pedantic точно не нужен, разве что в проекте нужна совместимость с Visual Studio (да и то, подозреваю что pedantic не решит всех проблем).
                Потому что если она не нужна - зачем выкидывать половину языка ради какого-то абстрактного стандарта?
                Ответить
              • Что-то названия у них подозрительные...
                Ответить
            • А здесь не работает: http://codepad.org/o8IAzEsq
              In function 'int main()':
              Line 3: error: ISO C++ forbids taking address of function '::main'
              compilation terminated due to -Wfatal-errors.
              Ответить
            • И судя по отсутствию stack overflow за 5 секунд хвостовая рекурсия всё-таки соптимизировалась.
              Ответить
              • О, а в режиме C вообще жесть.
                http://codepad.org/JxYv1LpU
                >Segmentation fault
                Ответить
      • В Rust для этого есть специальная конструкция
        loop {
        ...
        }
        Ответить
    • И наиболее тру вариант:
      void __declspec(naked) func() {
      __asm {
      push ebp
      mov ebp, esp
      sub esp, __LOCAL_SIZE
      label:
      ; ...
      jmp label
      pop ebp
      ret
      }
      }
      Ответить
      • Не тру, платформо- и архитекткро-срецифично.
        Ответить
    • Нормальная запись бесконечного цикла, я не понял, какие предъявы у автора.
      Ответить
    • Минус успешно въёбан.
      Ответить

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