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

    +157

    1. 1
    2. 2
    3. 3
    // ...
    ReplaceHtmlEntities( std::string(abstract), true );
    // ...

    В одном из проектов было найдено (очередная операция подергивания):

    void ReplaceHtmlEntities(std::string &, bool /* = true */);
    abstract - const char *

    Запостил: JeremyW, 21 Апреля 2011

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

    • Без контекста не совсем понятно, что именно делается. Модифицируется временный объект без каких-либо иных побочных эффектов? Если так, то тогда да - подергивание...

      Хотя, разумеется, в стандартном С++ этот код в принципе не компилируем - неконстантная ссылка не может быть проинициализирована временным объектом. Так что это говнокод в любом случае, независимо от того, что там именно делается.
      Ответить
      • бородатый компилятор VS2003, код компилируемый...
        Ответить
        • Ну это известная фишка, которая микрософтами была реализована умышленно (зачем-то им там понадобилось). Они понимали, что это нестандарт, и опция компилятора /Za ("запретить MS расширения") отключала подобные трюки еще со времен царя гороха, т.е. с шестой студии.

          С точки же зрения стандартного С++ - код некомпилируемый.
          Ответить
          • Только с этой опцией не компилилось нифига, а многие о ней вообще не знали, так что она была бесполезна.
            Ответить
            • Ну так потому компилер и был так расширен, что без этих расширений "не компилировалось нифига".

              А знали или не знали - это вопрос десятый. Знать надо не опцию, а то, что неконстантная ссылка в С++ не привязывается к временном объекту. Т.е. независимо от состояния этой опции неопревданное использование нестандартного кода - говнокод.
              Ответить
              • Ну вот поведение по-умолчанию этого, так сказать, компилятора и провоцировало на говнокод. При портировании все эти блохи вылезали и их душили, но потом очередной виндовз-программист не моргнув глазом добавлял новых. А что, в студии всё работает.
                Ответить
                • А оно так получается при использовании практически любого компилятора в комплксе с самозваными "программистами-практиками".

                  Классикой жанра в этой области является далеко не студия, а пресловутый GCC с его развеселым пестрым зоопарком включенных по умочанию самодеятельных расширений языка.
                  Ответить

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